XAML样式 - 如何在覆盖触发的setter时使用BasedOn

时间:2010-02-11 16:38:27

标签: wpf xaml triggers styles

我正在使用XAML样式使用自己的图像创建自定义单选按钮。该风格使用触发器根据焦点,按下等改变按钮的外观。这是风格:

<Style x:Key="SmallButtonAsRadioButton" TargetType="RadioButton">
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="RadioButton">
                <Grid x:Name="Container">
                    <Image x:Name="img" Source="/Resources/Elements/Buttons/10.png" Margin="6" />
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsKeyboardFocused" Value="True">
                        <Setter TargetName="img" Property="Source" Value="/Resources/Elements/Buttons/11.png" />
                        <Setter TargetName="img" Property="Margin" Value="0" />
                    </Trigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsKeyboardFocused" Value="True" />
                            <Condition Property="IsChecked" Value="True" />
                        </MultiTrigger.Conditions>
                        <Setter TargetName="img" Property="Source" Value="/Resources/Elements/Buttons/12.png" />
                    </MultiTrigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsKeyboardFocused" Value="False" />
                            <Condition Property="IsChecked" Value="True" />
                        </MultiTrigger.Conditions>
                        <Setter TargetName="img" Property="Source" Value="/Resources/Elements/Buttons/12a.png" />
                        <Setter TargetName="img" Property="Margin" Value="6" />
                    </MultiTrigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="img" Property="Source" Value="/Resources/Elements/Buttons/12.png" />
                        <Setter TargetName="img" Property="Margin" Value="0" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我需要创建一个基于此的新样式,使用不同的图像。显然,我想重用这种风格,但我不知道如何覆盖这些图像设置器。类似的东西:

<Style x:Key="SmallButtonAsRadioButtonBlue" BasedOn="{StaticResource SmallButtonAsRadioButton}" TargetType="RadioButton">
    <Setter - (Override image...
    <Setter - (Override image...

感谢任何见解。

1 个答案:

答案 0 :(得分:1)

您可以做的是从您自己的自定义控件中的单选按钮派生,并将图像作为属性。然后你不必覆盖样式(你可以只定义一次),每次你想使用不同的图像,你可以在xaml中设置它们。 (或样式 - 无需再次重做控制模板,只需使用setter)