在自定义控件上设置默认样式或控件模板

时间:2019-08-15 13:46:36

标签: c# wpf xaml

我创建了一个自定义控件并为其定义了样式。我希望在使用控件时可以自动应用该样式。

现在我的代码结构如下:

自定义控件继承自ProgressBar

namespace MyProjectNamespace
{
    [TemplatePart(Name = SomePartName, Type = typeof(PathFigure))]
    public class RadialProgressBar : ProgressBar
    {
        // class definitions and logic
    }
}

样式在名为RadialProgressBar.xaml的ResourceDictionary中定义

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:MyProjectNamespace">

    <Style TargetType="local:RadialProgressBar">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:RadialProgressBar">
                    <!-- controls -->
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

当我必须使用控件时,必须像这样引用ResourceDictionary:

<Window x:Class="FWUpdateLoadingSpinner.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MyProjectNamespace"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="RadialProgressBar.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <local:RadialProgressBar />
</Window>

是否有可能做到这一点,所以在我想使用控件时不必定义ResourceDictionary?仅具有默认模板(如普通.NET控件(可以覆盖))。

这是一个大项目的一部分,如果可能,我希望将此文件与App.xaml等文件分开。

0 个答案:

没有答案