12

コントロールの XAML スタイルに取り組んでいます。以下のコードは、スタックパネルの色を設定するためのものです。それはうまくいきますが、私がやりたいことは他にあります。トリガーがアクティブになっている場合、スタックパネル内のすべての子アイテムのフォントの色を設定したいと思います。

現時点では、スタックパネル内にテキストブロックしかなく、テキストボックス用に別のスタイルを簡単に作成できることがわかっています。ただし、このスタイルがトリガーされると、すべてのテキストブロックではなく 1 つのみに影響します。しかし、パネルのマウスオーバートリガーを取得したらすぐに、スタックパネル内のすべてのアイテムを変更したいと考えています。

これは XAML でも可能ですか、それとも通常のイベントをコーディングする必要がありますか?

<Style x:Key="XStack" TargetType="StackPanel">
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Color="White" Offset="0"/>
                <GradientStop Color="SkyBlue" Offset="6"/>                    
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <!-- Trigger-->
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True" >
            <Setter Property="Background" Value="SkyBlue"/>
        </Trigger>
    </Style.Triggers>
</Style>    
4

2 に答える 2

16

これをトリガーに追加します。

<Setter Property="TextElement.Foreground" Value="Blue"></Setter>

于 2009-03-02T13:47:17.253 に答える
3

Olle が言ったように、添付プロパティTextElement.Foregroundをカスタム値に設定できます。ビジュアル ツリーの子コントロール/UI ノードの場合、プロパティが設定されていない場合、WPF は値を見つけて使用するまで UI 階層をたどります。これは、すべての子コントロールが、親レベルで定義されたプロパティ値を共有できることを意味します。

これはすべての TextBlocks で機能するはずですが、StackPanel に TextBox が含まれている場合、そのテキストの色は影響を受けません。これは Control 基本クラスの Foreground プロパティを使用します。そのため、考えられるすべての子要素タイプで必ずテストしてください。

于 2009-03-02T14:14:03.743 に答える