1

我正在创建一个单选按钮样式。RadioButton 有一个承载 ContentControl 的边框。ContentControl 将其 Content 属性设置为Path在单独的 ResourceDictionary 中声明的 (FemaleVector)。当单选按钮 IsChecked 时,如何更改路径的 Fill 属性?以下是我到目前为止所拥有的。我可以更改边框的背景属性,但设置 ContentControl 的 Foreground 属性不会更改路径的颜色。(没想到这行得通。)

<Style x:Key="Female" TargetType="{x:Type RadioButton}">
    <Setter Property="Margin" Value="0,0,5,0"/>
    <Setter Property="Cursor" Value="Hand"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type RadioButton}">
                <Border x:Name="border" Padding="7,3,7,3" Width="35" Height="35" BorderBrush="#8CD567DC" Background="#00D567DC" CornerRadius="5" BorderThickness="0.8">
                    <ContentControl x:Name="content" Content="{DynamicResource FemaleVector}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter Property="Background" TargetName="border" Value="#8CD567DC"/>
                        <Setter Property="Foreground" TargetName="content" Value="Blue"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我不喜欢在我的样式中有路径的长数据属性,所以我将它们移动到一个单独的 ResourceDictionary 中。我是否应该将路径放回我的样式而不是将其保存在单独的 ResourceDictionary 中?

编辑:类似的问题在这里这里

4

1 回答 1

2

如果样式没有在某处重用,我个人会将其保存在本地样式资源部分。这样你就能看到更大的画面。否则,将它保存在 ResourceDictionary 中是明智的:)

无论哪种方式,您都应该能够通过以下方式更改 Fill 属性:

<Setter Property="Content.Fill" TargetName="content" Value="Blue"/>

如果这不起作用,我建议更多方法:您可以在 Xaml 中使用 Trigger.EnterActions<>。或许通过动画设置属性效果会更好?带有 setter 的 ControlTemplate 触发器有时会受到限制。

还有相对绑定。但你必须小心。(如果您想让它可重复使用)在您的 FemaleVector 样式中,您可以将 Fill 与 ContentControl Foreground 绑定。在 Google 中查找 RelativeBinding。

然后是财产继承。如果在 FemaleVector 中设置填充颜色,则需要使用样式。如:

<Style>
<Setter Property="Fill" Value="BLACK" />
</Style>

您可以稍后设置 ContentControls 样式并在那里添加触发器,例如:

<ContentControl.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding={Binding IsChecked, RelativeSource={RelativeSource AncestorType=RadioButto}} Value=TRUE>
<Setter Property="Path.Fill" Value="BLACK" />
</DataTrigger>

于 2012-09-15T05:40:15.707 回答