将样式从按钮的依赖项属性应用于控件



我创建了一个自定义控件,它是我正在制作的其他一些控件的基础。然后我为每个模板定义了控制模板,所以现在我可以做以下操作:

<!-- First layout -->
<custom:MyCustomControl Style="{StaticResource CustomStyle1}" />
<!-- Second layout -->
<custom:MyCustomControl Style="{StaticResource CustomStyle2}" />
...
etc.

然后我想制作它,这样我只需按下一个按钮就可以从一种风格切换到另一种风格。我最初的想法是创建具有StyleToApply依赖属性的自定义Button,并找到其包含父级的方法。然后,我会设置按钮的OnClick方法,将其包含控件的样式更改为按钮的依赖属性的样式。然而,我的风格没有得到认可:

<!-- Within a custom control or user control -->
<local:StyleButton StyleToApply="{StaticResource ResourceKey}" ... />
^ no suggested styles

有可能做到这一点吗?如果是,如何?如果没有,我该怎么办?

一个可能的解决方案是在XAML中同时拥有两个控件,并将它们的Visibility绑定到视图模型中的属性,即将Control1的Visibility绑定到视图模式中的public bool StandardLayout,将Control2的Visibility与之相反。

这个答案的想法和我的增强:

<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
</Window.Resources>
<!-- First layout -->
<custom:MyCustomControl Style="{StaticResource CustomStyle1}" Visibility="{Binding StandardLayout, Converter={StaticResource BooleanToVisibility}}" />
<!-- Second layout -->
<custom:MyCustomControl Style="{StaticResource CustomStyle2}" Visibility="{Binding StandardLayout, Converter={StaticResource BooleanToVisibility}, ConverterParameter=Inverted}"/>

免责声明:我自己还没有尝试过ConverterParameter=Inverted部分,你可能需要制作另一个反转第一个的视图模型属性,或者像这里一样制作一个InverseBooleanToVisibilityConverter。

编辑:然后,当点击按钮时,只会将bool翻转过来,控件就会切换可见性。

最新更新