我有以下自定义控件
public class MagicButton : Control
{
static MagicButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MagicButton),
new FrameworkPropertyMetadata(typeof(MagicButton)));
}
}
使用以下主题/ Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:WpfApplication4">
<Style TargetType="{x:Type l:MagicButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type l:MagicButton}">
<Border />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type l:MagicButton}"
x:Key="OtherStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type l:MagicButton}">
<Border />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
当我使用默认样式使用MagicButton控件时,一切正常,但当我尝试使用“OtherStyle”时
<l:MagicButton Style="{StaticResource OtherStyle}"/>
无法找到带有异常“{”的样式找不到名为'OtherStyle'的资源。资源名称区分大小写。“}”
然而,如果我将OtherStyle移动到App.xaml就可以了。
我不想把它放在App.xaml中,我想要的是我的Themes / Generic.xaml文件包含默认样式以及人们可以明确选择使用的键命名样式
答案 0 :(得分:3)
由于generic.xaml
文件没有代码,我们无法创建它的实例来从中读取Style
。 CustomControl
使用Style
从DefaultStyleKey
访问Application.Resources
,如您在示例中所示。因此,您无法以其他方式访问它。
但是,Style
是为此控件定义自定义Style
的正确位置,与所有其他控件一样。您非常乐意为Button
或其他任何.NET控件定义generic.xaml
,那么为什么不为您自己的控件呢?
更新&gt;&gt;&gt;
它不是特定于应用程序的样式,它是我想要保留在theme / Generic.xml中的控件的替代样式,以便引用该主题的任何项目也可以使用它。
是的,但是你试图在Application.Resources
之外引用它而你不能......它不像DependencyProperty
。您可以做的是向您的控件添加Style
,在内部设置不同的{{1}}。