我有一个自定义控件绑定到几个属性,我想分开样式,但我遇到了问题。 基本上它是一个内置ContentControl的Button。 Button样式依赖于PropertyA(bool),但ContentControls样式依赖于PropertyA和PropertyB(具有5个元素的枚举)。
<Button Style="{Binding PropertyA, Converter={StaticResource styleSelector}}">
<Button.Template>
<ControlTemplate TargetType="Button">
[...]
<ContentControl x:Name="cc1">
<ContentControl.Template>
<MultiBinding Converter="{StaticResource contentSelector}">
<Binding Path="PropertyA" />
<Binding Path="PropertyB" />
</MultiBinding>
</ContentControl.Template>
</ContentControl>
[...]
</ControlTemplate>
</Button.Template>
</Button>
将样式移至资源
<Style x:Key="ButtonStyleA1" TargetType="Button">
[...]
</Style>
<Style x:Key="ButtonStyleA2" TargetType="Button">
[...]
</Style>
因为ContentControl是Button的一部分,所以应该可以将ContentControl的模板移动到ButtonStyleA1
和ButtonStyleA2
,并减少对PropertyB的依赖。
我尝试在样式中使用<Setter ... TargetName="cc1">
,但编译器找不到cc1。
您是否有一个简单而干净的解决方案,其中绑定仍保留在Button中?
非常感谢!
答案 0 :(得分:0)
最简单的方法可能是在Button样式中设置Button的ControlTemplate
属性。然后,您可以根据需要为按钮定义任意数量的样式,每个样式都包含自己的ControlTemplate
,这些样式是根据 PropertyA 的值选择的。
在每个ControlTemplate中,您可以使用样式触发器将内容控件的模板设置为五个中的一个。您可以将内容控件的模板定义为Button的ControlTemplate
或其他位置的资源,具体取决于您希望如何组织它。
我希望,我的问题是正确的,这对您的情况有帮助。
修改强>
如果您需要从后面的代码访问ContentControl
,可以定义模板部分来执行此操作。