如何将样式基于继承的样式

时间:2015-03-05 10:32:23

标签: c# wpf styles

所以我有一个Master Detail页面。在我的母版页面中,我有一个样式,可以为所有按钮设置样式。

母版页

 <Style TargetType="Button">
            <Setter Property="Background" Value="White" />
            <Setter Property="TextBlock.TextAlignment" Value="Center" />
            <Setter Property="RenderTransformOrigin" Value="-0.893,-11.7"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
        </Style>

在我的详细信息页面我有一个按钮,我想通过样式添加一些触发器

            <Button Content="{Binding DeleteMultipleButton}" Margin="0,0,5,0" CommandParameter="{Binding ElementName=files, Path=SelectedItems}" Command="{Binding DeleteMultipleFiles}">
                <Button.Style>
                    <Style TargetType="{x:Type Button}">
                        <Setter Property="IsEnabled" Value="True"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Deleting}" Value="True">
                                <Setter Property="IsEnabled" Value="False"/>
                            </DataTrigger>                              
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>

但是这会覆盖继承的样式,我会丢失按钮样式。有没有办法可以将我的按钮样式基于继承的样式? (我无法通过静态资源和密钥执行此操作,因为资源位于不同的页面中)

2 个答案:

答案 0 :(得分:2)

您可以使用BasedOn属性:

<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">

保持基本按钮的样式:

<Style TargetType="Button">
        <Setter Property="Background" Value="White" />
        <Setter Property="TextBlock.TextAlignment" Value="Center" />
        <Setter Property="RenderTransformOrigin" Value="-0.893,-11.7"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
    </Style>

将BasedOn属性应用于Detail Page:

上的按钮
<Button>
        <Button.Style>
            <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
                ...
            </Style>
        </Button.Style>
    </Button>

答案 1 :(得分:0)

因为这两个样式在不同的页面上,它使得从默认样式继承是不可能的,所以我所做的是构建一个App.xaml资源文件,其中包含我的样式,然后在两个页面上添加代码:

    <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Resource.xaml" />
    </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

到我的xaml。这意味着我的页面可以使用Mike Eason代码覆盖继承的样式:

<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">