0

我有一个绑定到多个属性的自定义控件,我想分离样式,但我遇到了问题。基本上它是一个内部带有 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 的模板移动到 PropertyBButtonStyleA1ButtonStyleA2减少对 PropertyB 的依赖。我尝试<Setter ... TargetName="cc1">在样式中使用,但编译器找不到 cc1。您是否有一个简单而干净的解决方案的想法,其中绑定保留在 Button 中?

非常感谢!

4

1 回答 1

0

最简单的方法可能是ControlTemplate从 Button 样式中设置 Button 的属性。然后,您可以根据需要为按钮定义任意数量的样式,每个样式都包含它自己的样式,这些样式是根据PropertyAControlTemplate的值选择的。

在每个 ControlTemplate 中,您可以使用样式触发器将内容控件的模板设置为五个之一。您可以将内容控件的模板定义为 Button 的资源ControlTemplate或其他位置,具体取决于您希望如何组织它。

我希望,我解决了您的问题,这对您的情况有所帮助..

编辑:

如果您需要ContentControl从后面的代码访问您的代码,您可以定义模板部分来执行此操作。

于 2013-03-01T10:36:11.537 回答