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>