我有一个类库,我正在定义(基本上扩展)一些控件,例如TextBox
,Button
等。我也使用MaterialDesignInXamlToolkit
来设置控件的样式。因此,我的类库基本上具有我自己的扩展功能的控件,它们看起来像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(这将包含所有全局样式)
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MaterialControls">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
<ResourceDictionary>
<Style TargetType="local:MaterialTextBox">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Height" Value="100"/>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
现在我想要将这些样式应用于MaterialTextBox
,这样无论我在哪里使用它,它都应该带有这种外观并且开箱即用。
答案 0 :(得分:0)
在类库中,您可以指定全局可访问的样式并应用于所有控件的位置是什么?
真的没有。在单个资源字典中,您可以使用<ResourceDictionary.MergedDictionaries>
导入您在资源Dictionary本身中定义的资源所基于的资源,例如:
<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
或某种&#34;全局资源缓存的概念&#34;在课堂图书馆。
答案 1 :(得分:0)
找到了解决方案。
我正在使用Class Library
项目,我实际应该使用WPF Custom Control Library
项目。这里项目类型很重要,否则你必须使用.csproj
文件才能使它工作。
现在创建了一个新的WPF Custom Control Library
项目(New Project > Windows > Classic Desktop > WPF Custom Control Library
模板)。该项目有Themes\Generic.xaml
文件,该文件将用作样式的默认位置。