课堂图书馆的全球可访问风格

时间:2017-12-13 13:11:53

标签: c# wpf xaml material-design-in-xaml

我有一个类库,我正在定义(基本上扩展)一些控件,例如TextBoxButton等。我也使用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,这样无论我在哪里使用它,它都应该带有这种外观并且开箱即用。

2 个答案:

答案 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文件,该文件将用作样式的默认位置。