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



我有以下自定义控件

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文件包含默认样式以及密钥命名样式,人们可以使用显式选择这些样式

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

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


更新>>>

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

是的,但你试图在generic.xaml之外引用它,但你不能。。。它不像CCD_ 11。可以DependencyProperty添加到控件中,该控件在内部设置不同的Style

相关内容

  • 没有找到相关文章

最新更新