C# 类库中的全局可访问样式

C# 类库中的全局可访问样式,c#,wpf,xaml,material-design-in-xaml,C#,Wpf,Xaml,Material Design In Xaml,我有一个类库,我在其中定义(基本上扩展)一些控件,如TextBox,按钮等。我还使用它来设置控件的样式。因此,我的类库基本上会有带有我自己扩展功能的控件,它们看起来像MaterialDesignInXamlToolkit中定义的样式 现在我的问题是,既然我在类库项目中没有App.xaml,我应该在哪里编写xaml代码来导入MaterialDesignInXamlToolkit的样式,以便将它们应用到我的扩展控件?类库中的哪个位置可以指定全局可访问并应用于所有控件的样式 我搜索了一下,但没有找到我

我有一个类库,我在其中定义(基本上扩展)一些控件,如
TextBox
按钮
等。我还使用它来设置控件的样式。因此,我的类库基本上会有带有我自己扩展功能的控件,它们看起来像
MaterialDesignInXamlToolkit
中定义的样式

现在我的问题是,既然我在类库项目中没有
App.xaml
,我应该在哪里编写xaml代码来导入
MaterialDesignInXamlToolkit
的样式,以便将它们应用到我的扩展控件?类库中的哪个位置可以指定全局可访问并应用于所有控件的样式

我搜索了一下,但没有找到我想要的。请帮忙


更新:这是我的代码(不工作)

MaterialTextBox.cs

using System.Windows.Controls;

namespace MaterialControls
{
    public class MaterialTextBox : TextBox
    {
        ... some extra features here (no XAML file for this class, just this .cs)...
    }
}
Themes.xaml(这将包含所有全局样式)


现在我希望这些样式应用于
MaterialTextBox
,这样无论我在哪里使用它,它都应该具有这种外观和功能

类库中的哪个位置可以指定全局可访问并应用于所有控件的样式

真的没有。在单个资源字典中,您可以使用
导入资源字典中定义的资源所基于的资源,例如:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WpfApplication8">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
    </ResourceDictionary.MergedDictionaries>

    <Style TargetType="...">
        <!-- style based on MaterialDesignTheme -->
    </Style>
</ResourceDictionary>

但是在类库中没有App.xaml或某种“全局资源缓存”的概念。

找到了解决方案

我使用的是
类库
项目,实际上我应该使用
WPF自定义控件库
项目。在这里,项目类型很重要,否则您必须使用
.csproj
文件才能使其正常工作


因此,现在创建了一个新的
WPF自定义控件库
project(
newproject>Windows>Classic Desktop>WPF自定义控件库
template)。此项目具有
Themes\Generic.xaml
文件,该文件将用作样式的默认位置。

不起作用。尝试将xaml文件添加到项目中,将上述代码与一些简单样式一起进行测试。而且没有效果。请阅读更新后的问题。再次阅读我的答案。你应该把材料放在后面。啊,好的。。我没听清楚。不管怎么说,我做了改变,但它不起作用。你那边行吗?xaml文件的
Build Action
Custom Tool
是什么?ResourceDictionary的Build Action应该始终是Page。这个答案与原始问题有什么关系…?这正是我想要的。在发布问题时,我没有意识到这一点。所以我问这个问题是基于我所做的,但这是正确的解决方案。如果将来有人像我一样做类似的事情,那么这个答案会很有帮助。但我同意,这个问题是关于类库的,如果从这个角度来看,这不是确切的答案。我回答了你的问题,但你甚至都没有投票赞成。相反,你提供了与你的问题无关的你自己的答案。这是有道理的。还是不行,冷静点,朋友。我没有投赞成票,因为它没有解决问题。虽然,现在我意识到这个问题是错误的,而且有点模棱两可。那可能是因为我对这个话题缺乏了解。无论如何,我将删除这个问题,因为我认为它将更令人困惑而不是有用。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WpfApplication8">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
    </ResourceDictionary.MergedDictionaries>

    <Style TargetType="...">
        <!-- style based on MaterialDesignTheme -->
    </Style>
</ResourceDictionary>