2
我正在制作一个自定义控件,它有两种非常不同的样式需求。一个用于基本外观,另一个用于更高级的外观。两种风格之间的自定义控件切换
我的控件包含一个依赖属性为以下枚举:
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中获取样式。还是有更好的方式来交换我的风格?
如何简单地将每个容器的Visible属性绑定到枚举的当前值? – kenny
控件有几个必需的部分,两个模板都是相同的(尽管模板完全不同)。我目前在ApplyTemplate覆盖内找到模板部分。如果我给每个部件一个唯一的名称,并且在控件类型更改时重新获取它们(使用每个部件的第二个名称),那么您的建议将起作用。这个古怪的设计将很好地避免。 – mbursill
在这种情况下,您可以将Visibility属性绑定到控件中的“IsAdvancedStyle”属性(而不是通过控件中的名称引用所有内容) - 但这不是最佳解决方案。 Application.Current.TryFindResource的结果是否返回null?它是否返回一个非'样式'实例?不要忘记资源名称区分大小写。 'generic.xaml'是否已正确添加到主应用程序资源集合中? – fatty