【问题标题】:XAML Styles - how to use BasedOn while overriding triggered setterXAML 样式 - 如何在覆盖触发设置器时使用 BasedOn
【发布时间】:2011-01-15 19:13:49
【问题描述】:

我正在使用 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...

感谢任何见解。

【问题讨论】:

    标签: wpf xaml triggers styles


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      相关资源
      最近更新 更多