在Generic.xaml中找不到命名样式

时间:2014-06-22 22:21:39

标签: wpf styles themes custom-controls staticresource

我有以下自定义控件

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文件包含默认样式以及人们可以明确选择使用的键命名样式

1 个答案:

答案 0 :(得分:3)

由于generic.xaml文件没有代码,我们无法创建它的实例来从中读取StyleCustomControl使用StyleDefaultStyleKey访问Application.Resources,如您在示例中所示。因此,您无法以其他方式访问它。

但是,Style是为此控件定义自定义Style的正确位置,与所有其他控件一样。您非常乐意为Button或其他任何.NET控件定义generic.xaml,那么为什么不为您自己的控件呢?


更新&gt;&gt;&gt;

  

它不是特定于应用程序的样式,它是我想要保留在theme / Generic.xml中的控件的替代样式,以便引用该主题的任何项目也可以使用它。

是的,但是你试图在Application.Resources之外引用它而你不能......它不像DependencyProperty。您可以做的是向您的控件添加Style,在内部设置不同的{{1}}。