gpt4 book ai didi

c# - 自定义控件在两种样式之间切换

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:08 25 4
gpt4 key购买 nike

我正在制作一个自定义控件,它具有两种截然不同的样式需求。一个用于基本外观,另一个用于更高级的外观。

我的控件包含以下枚举的依赖属性:

public enum ControlTypes
{
Basic,
Advanced
}

我在 generic.xaml 中创建了两种样式(具有非常不同的模板),并为每个样式指定了一个键。

在枚举属性的更改处理程序中,我试图找到样式并设置正确的样式。

private static void OnControlTypePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var myCustomControl = (MyCustomControl)d;

var basicControlStyle = Application.Current.TryFindResource("BasicControlStyle") as Style;
var advancedControlStyle = Application.Current.TryFindResource("AdvancedControlStyle") as Style;

if (myCustomControl.ControlType == ControlTypes.Basic)
myCustomControl.Style = basicControlStyle;
else if (myCustomControl.ControlType == ControlTypes.Advanced)
myCustomControl.Style = advancedControlStyle;
}

这两个样式始终为空。我不确定如何从 generic.xaml 中获取样式。或者是否有更好的方式来交换我的样式?

最佳答案

删除 OnControlTypePropertyChanged 中的代码并将类似这样的内容放入您的 XAML 中。请注意,我已绑定(bind)到名为 IsAdvanced 的属性,因为它更易于测试,但您可以通过更改 {x:Static namespace:nameofyourenum.Value}

的“True”来绑定(bind)到枚举
<Style TargetType="local:SomeControl">
<Style.Setters>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="local:SomeControl">
<StackPanel>
<TextBlock Text="DefaultTemplate"></TextBlock>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
<Style.Triggers>
<Trigger Property="IsAdvanced" Value="True">
<Trigger.Setters>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="local:SomeControl">
<TextBlock Text="Advanced Template"></TextBlock>
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger.Setters>
</Trigger>
</Style.Triggers>
</Style>

请注意,这仍然为使用您的控件的程序员提供了完全覆盖控件模板并执行他们想要的操作的能力。您原来的方法不允许这样做。

关于c# - 自定义控件在两种样式之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com