目前我们有一个枚举类型,其中每个唯一值都由唯一的样式表示:
<Style x:Key="EnumValue1" TargetType="CheckBox">
<Setter Property="FontSize" Value="11" />
<Setter Property="Margin" Value="0 0 1 0" />
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="Height" Value="18" />
<!-- ... common property setters etc. -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="CheckBox">
<Border>
<StackPanel>
<!-- custom enum value-specific control content -->
<ContentPresenter Content="{TemplateBinding Content}" />
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.Setters>
<Setter Property="Foreground" Value="WhiteSmoke" />
</Trigger.Setters>
</Trigger>
<!-- ... custom triggers etc ... -->
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
目前,复选框是在代码隐藏中以编程方式创建的-我将其更改为绑定到这些枚举值集合的 ListBox,我认为将它们转换为 DataTemplate 是有意义的-问题是,我如何最大化重新-利用?
我有大约 10 个唯一值和 10 个唯一样式 ...9/10 的样式使用相同的 Setter,ControlTemplate.Triggers 对于所有 10 个都是相同的,但显然 ControlTemplate 中的视觉树是不同的
我考虑过使用基本 Style 类并让每个特定变体派生 / 用另一个 Style 覆盖它并使用 StyleSelector,但是我如何在不必重新定义触发器的情况下改变每种样式的 ControlTemplate 视觉树?
但这似乎在“哲学上”是错误的……我觉得我应该使用 DataTemplates,因为根据定义,这就是它们的用途