子アイテムのWPF / XAMLスタイルセットプロパティ?
-
03-07-2019 - |
質問
コントロールのXAMLスタイルで作業しています。 以下のコードは、stackpanelの色を設定するためのものです。うまくいきますが、私がやりたいことは他にもあります。トリガーがアクティブになっている場合、stackpanel内のすべての子アイテムのフォントの色を設定します。
現時点では、stackpanel内にテキストブロックしかないため、textbockに別のスタイルを簡単に作成できることはわかっています。ただし、このスタイルがトリガーされると、すべてのテキストブロックではなく1つだけに影響します。 しかし、パネルのマウスオーバートリガーを取得したらすぐに、stackpanel内のすべてのアイテムを変更します。
これは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>
解決
これをトリガーに追加します:
<Setter Property="TextElement.Foreground" Value="Blue"></Setter>
他のヒント
Olle氏のように、添付プロパティTextElement.Foreground
をカスタム値に設定できます。ビジュアルツリーの子コントロール/ UIノードの場合、プロパティが設定されていない場合、WPFは値を見つけて使用するまでUI階層をたどります。これは、すべての子コントロールが親レベルで定義されたプロパティ値を共有できることを意味します。
これはすべてのTextBlocksで機能するはずです...ただし、StackPanelにTextBoxが含まれている場合、そのテキストの色は影響を受けません。 Control基本クラスのForegroundプロパティを使用します...したがって、可能なすべての子要素タイプでテストしてください。