好的,这就是问题所在。我试图弄清楚如何使这项工作:
考虑以下用于创建自定义按钮的 ControlTemplate:
<ControlTemplate x:Key ="cButton" TargetType="{x:Type Button}">
<!--Styles-->
<Grid x:Name="bkg">
<Grid.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="{TemplateBinding Background}" Offset="0.5"/><!-- Error! -->
<GradientStop Color="White" Offset="1.0"/>
</LinearGradientBrush>
</Grid.Background>
<ContentPresenter
TextBlock.FontSize="80"
HorizontalAlignment="Center"
VerticalAlignment="Center"
ContentSource="Content" />
</Grid>
<!--Triggers-->
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bkg" Property="Background" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
此控制模板构成此脚本的一部分,如您所见,我正在尝试从主网格中概述的按钮声明中获取背景颜色。
<Grid>
<Grid.Resources>
<ControlTemplate x:Key ="cButton" TargetType="{x:Type Button}">
<!--Styles-->
<Grid x:Name="bkg">
<Grid.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="{TemplateBinding Background}" Offset="0.5"/><!-- Error! -->
<GradientStop Color="White" Offset="1.0"/>
</LinearGradientBrush>
</Grid.Background>
<ContentPresenter
TextBlock.FontSize="80"
HorizontalAlignment="Center"
VerticalAlignment="Center"
ContentSource="Content" />
</Grid>
<!--Triggers-->
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bkg" Property="Background" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions >
<Button Name="btnIn" Grid.Column="0" Content="IN" Background="Green" Foreground="White" Template="{StaticResource cButton}"/>
<Button Name="btnOut" Grid.Column="1" Content="OUT" Background="Red" Foreground="White" Template="{StaticResource cButton}" />
</Grid>
好的,现在主要问题是这个..
问题1:为什么按钮的ControlTemplate中标有错误注释的行没有使用模板绑定检索背景颜色?如果我使用纯色,它会工作得很好,所以我看不出为什么它不应该以这种方式工作。请提供发生这种情况的原因。
以下仍然有点不清楚,我不知道它们是否与问题有关,如果有人可以清除它们,那就太好了。
问题 2:这两个 TargetType 值“Button”和“{x:Type Button}”有什么区别。我知道它们是 typeof 等价物,但两者之间有什么区别吗?我读了 MSDN,但真正的区别并不那么清楚。
问题 3:我何时使用 x:Name 以及何时使用 Name ?区别再次不清楚。
问题 4:x:Static 是做什么的?