友好的方式克隆样式与相似的模式

本文关键字:相似 样式 模式 方式克 | 更新日期: 2023-09-27 18:10:17

我有8个样式都是copy &粘贴,但对绑定进行少量更改。下面是一个例子:

<Style x:Key="CardR0" TargetType="usercontrol:Card">
    <Setter Property="Played"       Value="{Binding Combat.BlaBla.R.Played[0]}"/>
    <Setter Property="Won"          Value="{Binding Combat.BlaBla.R.Won[0]}"/>
    <Setter Property="Turn"         Value="{Binding Combat.BlaBla.R.Turn[0]}"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding RightSelectedCard}" Value="0">
            <Setter Property="IsSelected" Value="true"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
<Style x:Key="CardR1" TargetType="usercontrol:Card">
    <Setter Property="Played"       Value="{Binding Combat.BlaBla.R.Played[1]}"/>
    <Setter Property="Won"          Value="{Binding Combat.BlaBla.R.Won[1]}"/>
    <Setter Property="Turn"         Value="{Binding Combat.BlaBla.R.Turn[1]}"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding RightSelectedCard}" Value="1">
            <Setter Property="IsSelected" Value="true"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
...
<Style x:Key="CardL0" TargetType="usercontrol:Card">
    <Setter Property="Played"       Value="{Binding Combat.BlaBla.L.Played[0]}"/>
    <Setter Property="Won"          Value="{Binding Combat.BlaBla.L.Won[0]}"/>
    <Setter Property="Turn"         Value="{Binding Combat.BlaBla.L.Turn[0]}"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding LeftSelectedCard}" Value="0">
            <Setter Property="IsSelected" Value="true"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

你明白了,左边从0到3,右边从0到3。

有一种XAML方法可以用模式或其他东西创建(或其他)所有这些,或者我必须使用旧的(如果我忘记了一些东西的话很危险)复制&粘贴?

编辑:Combat.BlaBla…对于每一方都是特定的,尽量使它简短忘记它=P

友好的方式克隆样式与相似的模式

如果你愿意,你可以创建一个主样式,然后从它派生的样式:

<Page.Resources>
    <Style x:Key="MainStyle" TargetType="local:RegularPolygon">
        <Setter Property="Fill" Value="Red"/>
    </Style>
    <Style x:Key="SecondaryStyle" TargetType="local:RegularPolygon" BasedOn="{StaticResource MainStyle}" >
        <Setter Property="Stroke" Value="Blue"/>
    </Style>
</Page.Resources>

然后将你需要的样式应用到特定元素