C# 从按钮';s依赖属性

C# 从按钮';s依赖属性,c#,wpf,.net-core,custom-controls,C#,Wpf,.net Core,Custom Controls,我已经创建了一个自定义控件,作为我正在创建的其他一些控件的基础。然后,我为每个模板定义了控件模板,因此现在可以执行以下操作: ... 等 然后我想做它,这样我就可以通过按下按钮从一种风格切换到另一种风格。我最初的想法是使用StyleToApplydependency属性创建自定义按钮,并找到其包含的父项。然后,我将设置按钮的OnClick方法,将其包含控件的样式更改为按钮的dependency属性的样式。但是,我的风格没有得到认可: ^没有建议的款式 甚至有可能做到这一点吗?如果是,怎么

我已经创建了一个自定义控件,作为我正在创建的其他一些控件的基础。然后,我为每个模板定义了控件模板,因此现在可以执行以下操作:


...
等
然后我想做它,这样我就可以通过按下按钮从一种风格切换到另一种风格。我最初的想法是使用
StyleToApply
dependency属性创建自定义
按钮
,并找到其包含的父项。然后,我将设置按钮的
OnClick
方法,将其包含控件的样式更改为按钮的dependency属性的样式。但是,我的风格没有得到认可:


^没有建议的款式

甚至有可能做到这一点吗?如果是,怎么做?如果没有,我可以做什么呢?

一个可能的解决方案是在XAML中同时使用两个控件,并将它们的
可见性
绑定到viewmodel中的属性,即将Control1的可见性绑定到viewmodel中的
公共bool StandardLayout
,将Control2的可见性绑定到相反的位置

我的想法和改进:

<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=反转部分,您可能需要创建另一个反转第一个部分的viewmodel属性,或者像InverseBoleAutoVisibilityConverter这样的属性

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