如何在wpf模板中允许变量?
我有三个按钮,它们只在显示的文本、传递给命令的参数和在图像触发器中比较的值上有所不同。有没有办法将其合并到一个模板中以消除所有重复的XAML 样式定义:如何在wpf模板中允许变量?,wpf,triggers,controltemplate,Wpf,Triggers,Controltemplate,我有三个按钮,它们只在显示的文本、传递给命令的参数和在图像触发器中比较的值上有所不同。有没有办法将其合并到一个模板中以消除所有重复的XAML 样式定义: <Style TargetType="{x:Type Button}" x:Key="myGridHeaderButton"> <Setter Property="Background" Value="Blue" /> <Setter Property="HorizontalContentAlignment
<Style TargetType="{x:Type Button}" x:Key="myGridHeaderButton">
<Setter Property="Background" Value="Blue" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}" BorderThickness="0,0,1,0" BorderBrush="white">
<ContentPresenter Margin="1" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightBlue" />
</Trigger>
</Style.Triggers>
</Style>
按钮声明:
<Button Grid.Column="2" Style="{StaticResource myGridHeaderButton}" Command="{Binding Path=ColumnHeaderClickCommand}" CommandParameter="Description">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="20" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="Custodian" Margin="3,0,0,0" />
<Image Grid.Column="2" Width="16" Height="16">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="/Resources/Sort.Unsorted.png" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=SortAscending}" Value="True" />
<Condition Binding="{Binding Path=SortColumn}" Value="Description" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Source" Value="/Resources/Sort.Ascending.png" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=SortAscending}" Value="False" />
<Condition Binding="{Binding Path=SortColumn}" Value="Description" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Source" Value="/Resources/Sort.Descending.png" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</Grid>
</Button>
我认为命令和CommandParameter的声明与现在一样。如果只是文字上的差异,我认为只要把
放在正确的位置就行了,但是图像中嵌入了一种样式,它有两个基于不同值的触发器,我不知道如何将所有这些内容移动到模板中,并且仍然能够定义不同的触发器值
在这种情况下,所讨论的触发器值始终与CommandParameter值匹配。。。我会不会一定要这么做
谢谢
J您可以为附加值编写几个附加属性,并执行TemplateBinding以从模板内部访问它们。另一个选项是带有附加依赖属性的按钮子类。@EdPlunkett我必须对创建附加属性等做一些研究。但是在触发器条件下,您将如何引用它?在条件的值中使用绑定或TemplateBinding似乎不起作用。编译器抱怨绑定无效。您能提供一个您建议的示例吗?在这种情况下,可能需要编写一个多值转换器。可能答案与此相关。您可以为附加值编写两个附加属性,并执行模板绑定以从模板内部访问它们。另一个选项是带有附加依赖属性的按钮子类。@EdPlunkett我必须对创建附加属性等做一些研究。但是在触发器条件下,您将如何引用它?在条件的值中使用绑定或TemplateBinding似乎不起作用。编译器抱怨绑定无效。你能提供一个你建议的例子吗?在这种情况下,可能需要编写一个多值转换器。也许答案是相关的。