如何将XAML中定义的样式表引用存储在单独的类中以在任何XAML窗口中使用?

时间:2017-01-12 10:09:51

标签: c# wpf xaml

我有一个XAML MyXamlStyleSheet.xaml ,我在其中定义了Button和各种其他控件的样式。 我还有一个C#class MyButtonClass:Button ,我定义它来拦截基本的Button类并声明我想要给它的任何自定义功能。

在我想要使用的XAML窗口中,我声明了 xmlns:lc ,其中源指向C#类 MyButtonClass

我想要做的是当我宣布这个自定义按钮时

<lc:MyButtonClass .../>

我有 MyXamlCtyleSheet 中定义的样式的参考,该样式存储在 MyButtonClass 中,以便我可以从XAML窗口访问它。

我会在课堂上和xaml声明中写些什么?

<lc:MyButtonClass Style="{StaticResource ???"..../>

到目前为止,我已使用 MergedDictionaries 直接引用XAML样式表。但是我想用这条不同的路径来做。

1 个答案:

答案 0 :(得分:1)

找到答案。这与在 Window.Resources 部分中将字典合并到XAML窗口相同。从您的类中,您使用正确的路径实例化ResourceDictionary并将该字典合并到Button类的Dictionary中。

namespace YourNamespace
{

    public class MyCustomButton : Button
    {

        public MyCostumButton()
        {

            ResourceDictionary res = Application.LoadComponent(new Uri("/Directory/StyleDirectory.xaml", UriKind.RelativeOrAbsolute)) as ResourceDictionary;
            if (res == null)
                return;
            Resources.MergedDictionaries.Add(res);
            Style = (Style)FindResource("Name of the x:Key your gave your style");
        }
    }
}

这允许您在文件夹中编写一个完整的标准化控件库,其中每个控件都分配了一个C#类。因此,如果您有许多相同控件的实现,则可以始终定义最基本的行为,并查看该类引用的XAML文件。