1

私はラジオボタンスタイルを作成しています。RadioButton には、ContentControl をホストする Border があります。ContentControl の Content プロパティPathは、別の ResourceDictionary で宣言された (FemaleVector) に設定されています。ラジオボタンがチェックされているときにパスの 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<> を使用できます。おそらく、アニメーションを介してプロパティを設定すると、より良い効果が得られますか? セッターを使用した 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 に答える