Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将XAML中定义的样式表引用存储在单独的类中,以便在任何XAML窗口中使用?_C#_Wpf_Xaml - Fatal编程技术网

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

C# 如何将XAML中定义的样式表引用存储在单独的类中,以便在任何XAML窗口中使用?,c#,wpf,xaml,C#,Wpf,Xaml,我有一个XAMLMyXamlStyleSheet.XAML,其中定义了按钮和各种其他控件的样式。 我还定义了一个C#classMyButtonClass:Button,用于截取基本Button类并声明我想要提供的任何自定义功能 在我要使用的XAML窗口中,我声明了一个xmlns:lc,源代码指向C#classMyButtonClass 我想做的是当我声明这个自定义按钮时 <lc:MyButtonClass .../> 我有一个对MyXamlStyleSheet中定义的样式的引用

我有一个XAMLMyXamlStyleSheet.XAML,其中定义了按钮和各种其他控件的样式。 我还定义了一个C#classMyButtonClass:Button,用于截取基本Button类并声明我想要提供的任何自定义功能

在我要使用的XAML窗口中,我声明了一个xmlns:lc,源代码指向C#classMyButtonClass

我想做的是当我声明这个自定义按钮时

<lc:MyButtonClass .../>

我有一个对MyXamlStyleSheet中定义的样式的引用,该样式存储在MyButtonClass中,以便我可以从XAML窗口访问它

我应该在类和xaml声明中写什么

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


到目前为止,我一直使用合并词典直接引用XAML样式表。然而,我想用这个不同的路径来做

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

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文件

你实际上不想为MyButtonClass定义默认样式吗?不,我想能够自定义它,并在我的整个应用程序中看到该自定义反映,跨越大约20个窗口。如果我理解正确,你想将按钮的样式属性设置为一种样式,其x:键在自定义按钮的属性中定义?或者为什么不能使用StaticResource标记扩展设置样式?这是一种直接从字典设置样式的方法。我的意思是要有一个单独的文件夹,其中每个控件都有自己的类,每个类都有对字典和特定键的引用。这样,当我通过xmlns标记使用控件类时,我可以从样式表中指定其默认样式。