样式作为自定义用户控件的资源

时间:2012-10-13 22:53:54

标签: wpf xaml styles

我正在尝试修改扩展WPF工具包向导控件,这是一个自定义控件,它在generic.xaml文件中有一个默认样式但现在我想修改它,所以基于向导类型它完全改变了它的样式

<Style TargetType="{x:Type local:Wizard}">
    <Style.Triggers>
        <Trigger Property="WizardType" Value="Normal">
            <Setter Property="Style" Value="{StaticResource StandartWizardTemplate}" />
        </Trigger>
    </Style.Triggers>
</Style>

这是我修改generic.xaml的方法,但在坚持期间没有解决StandardWizardTemplate

<Style x:Key="StandartWizardTemplate" TargetType="{x:Type local:Wizard}">
    <Setter Property="Background" Value="#F0F0F0" />
    <Setter Property="BorderBrush" Value="#A0A0A0" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <Grid />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
    //Content of default template before modification
    </Setter>
</Style>

同一个文件包含另一个样式定义,它更改了Page ControlTemplate基于触发器,所以我虽然能够为Wizard做同样的事情

<Style TargetType="{x:Type local:WizardPage}">
    <Style.Triggers>
        <Trigger Property="PageType" Value="Blank">
            <Setter Property="Background" Value="#FFF0F0F0" />
            <Setter Property="BorderThickness" Value="0" />
            <Setter Property="Template" Value="{StaticResource BlankWizardPageTemplate}" />
        </Trigger>
        <Trigger Property="PageType" Value="Exterior">
            <Setter Property="Background" Value="#FFFFFF" />
            <Setter Property="BorderThickness" Value="0" />
            <Setter Property="ExteriorPanelBackground" Value="#E3EFFF" />
            <Setter Property="Template" Value="{StaticResource ExteriorWizardPageTemplate}" />
        </Trigger>
        <Trigger Property="PageType" Value="Interior">
            <Setter Property="Background" Value="#FFF0F0F0" />
            <Setter Property="BorderBrush" Value="{x:Static SystemColors.ActiveBorderBrush}" />
            <Setter Property="BorderThickness" Value="0,1,0,0" />
            <Setter Property="HeaderBackground" Value="#FFFFFF" />
            <Setter Property="Template" Value="{StaticResource InteriorWizardPageTemplate}" />
        </Trigger>
    </Style.Triggers>
</Style>

任何人都可以为我提供正确的样式实现,以便我的向导自定义控件可以像页面一样进行样式设置吗?

1 个答案:

答案 0 :(得分:0)

好的我找到了解决这个问题的方法,我所要做的就是创建新的ResourceDictionary并使用密钥集声明Wizard ControlTemplate。在Generic.xaml内部之后,我创建了Marge资源字典,并在

中包含了所有单独的Control模板字典

毕竟我的generic.xaml以这种方式看待。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:Converters="clr-namespace:CuratioCMS.Client.UI.Core.Converters"
                xmlns:local="clr-namespace:CuratioCMS.Client.UI.Controls">
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="./NormalWizardStyle.xaml" />
    <ResourceDictionary Source="./StepBased.xaml" />
    <ResourceDictionary Source="./MixedModeWizard.xaml" />
</ResourceDictionary.MergedDictionaries>

<Converters:WizardPageButtonVisibilityConverter x:Key="WizardPageButtonVisibilityConverter" />

<Style TargetType="{x:Type local:Wizard}">
    <Style.Triggers>
        <Trigger Property="WizardType" Value="Normal">
            <Setter Property="Template" Value="{StaticResource NormalModeWizardTemplate}" />
        </Trigger>
        <Trigger Property="WizardType" Value="StepWisivle">
            <Setter Property="Template" Value="{StaticResource StepModeWizardTemplate}" />
        </Trigger>
        <Trigger Property="WizardType" Value="MixedMode">
            <Setter Property="Template" Value="{StaticResource MixedModeWizardTemplate}" />
        </Trigger>
    </Style.Triggers>
    <Setter Property="Background" Value="#F0F0F0" />
    <Setter Property="BorderBrush" Value="#A0A0A0" />
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <Grid />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>
</ResourceDictionary>