11

私の例にとらわれないでください、質問のために私に耐えてください:

私のWPFアプリケーションでは、すべてのTextBoxに「緑色」の背景を持たせたい場合は、Application.Resourcesでそのように簡単に設定できます。

<Style TargetType="TextBox">
 <Setter Property="Background" Value="Green" />
</Style>

これは完全に機能します...(WPFに感謝します)。ただし、アプリケーションのどこかにTextBoxがあり、もう少しスタイルを追加したい場合は、緑色の背景が失われます。

例:

<TextBox>
 <TextBox.Style>
  <Style>
   <Style.Triggers>
    <Trigger Property="TextBox.IsMouseOver" Value="True">
     <Setter Property="TextBox.Foreground" Value="Red" />
    </Trigger>
  </Style.Triggers>
  </Style>
 </TextBox.Style>
</TextBox>

そのTextBoxは、マウスが上にあるときに赤の前景を正しく表示しますが、緑の背景は完全に失われます。

したがって、問題は次のとおりです。単純で競合しない、非常に小さなスタイルがどこかのコントロールに追加されているという理由だけで、上から来たすべてのスタイリングを完全に消去しないようにWPFに指示するにはどうすればよいですか?

4

1 に答える 1

13

Style 宣言で「BasedOn」を使用して、既にオーバーライドされたスタイルを継承できます。

2 番目のスタイルの宣言で、これを試してください。

<TextBox>
 <TextBox.Style>
  <Style BasedOn="{StaticResource {x:Type TextBox}}">
   <Style.Triggers>
    <Trigger Property="TextBox.IsMouseOver" Value="True">
     <Setter Property="TextBox.Foreground" Value="Red" />
    </Trigger>
  </Style.Triggers>
  </Style>
 </TextBox.Style>
</TextBox>

名前付きスタイルに基づいてスタイルを作成することもできます。

<Style x:Key=MyNamedStyle>
</Style>

<Style BasedOn="{StaticResource MyNamedStyle}" >
</Style>
于 2009-10-19T13:55:05.083 に答える