15

私が以下を持っているとしましょう:

<Style TargetType="{x:Type TextBox}">
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="BorderBrush" Value="Gray" />
    <Style.Triggers>
        <Trigger Property="IsFocused" Value="true"> 
            <Setter Property="BorderBrush" Value="Green" />
            <Setter Property="BorderThickness" Value="2" />
        </Trigger>
    </Style.Triggers> 
</Style>

これは問題なく動作し、特に問題はありませんが、かなり単純なケースです。IsFocused スタイルの状態を明示的なスタイルとしてリストしたい場合、そのスタイルを IsFocused スタイルとして参照するにはどうすればよいですか。

<Style x:key="ActiveStyle" TargetType="{x:Type TextBox}">
    <Setter Property="BorderBrush" Value="Green" />
    <Setter Property="BorderThickness" Value="2" />
</Style>

<Style TargetType="{x:Type TextBox}">
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="BorderBrush" Value="Gray" />
    <Style.Triggers>
        <Trigger Property="IsFocused" Value="true">
           -- Here I want to reference ActiveStyle and not copy the copy the setters
        </Trigger>
    </Style.Triggers> 
</Style>
4

4 に答える 4

13

ただし、この方法でスタイルを再利用できるとは思いません。

<Style x:Key="ActiveStyle" TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="IsFocused" Value="true">
            <Setter Property="BorderBrush" Value="Green" />
            <Setter Property="BorderThickness" Value="2" />
        </Trigger>
    </Style.Triggers>
</Style>

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource ActiveStyle}">
    <Setter Property="BorderThickness" Value="1" />
    <Setter Property="BorderBrush" Value="Gray" />
</Style>

別の解決策がわかりません:(

于 2009-07-26T07:59:07.503 に答える
9

これを行うには、まだ 3 番目の方法があります。

コントロール用に 2 つの名前付きコントロール テンプレートを作成します。

<ControlTemplate x:Key="NotFocused" TargetType="{x:Type TextBox}">  
    . . .
</ControlTemplate>  

<ControlTemplate x:Key="Focused" TargetType="{x:Type TextBox}">   
    . . .
</ControlTemplate>

次に、トリガーを含む TextBox のデフォルト スタイルを作成します。

<Style TargetType="{x:Type TextBox}">   
    <Style.Triggers>
        <Trigger Property="IsFocused" Value="True">
            <Setter Property="Template" Value="{StaticResource Focused}" />
        </Trigger>
        <Trigger Property="IsFocused" Value="False">
            <Setter Property="Template" Value="{StaticResource NotFocused}" />
        </Trigger>
    </Style.Triggers>
</Style>

トニー

于 2012-03-19T18:02:45.260 に答える
8

WPF は、この FrameworkElement.FocusVisualStyle に特別なプロパティを提供しているので、先に進んで割り当ててください :)

<TextBox FocusVisualStyle="{StaticResource ActiveStyle}" .....

またはセッターを使用した別の方法

<Style TargetType="{x:Type TextBox}">
 <Setter Property="BorderThickness" Value="1" />
 <Setter Property="BorderBrush" Value="Gray" />    
 <Setter Property="FocusVisualStyle" >
  <Setter.Value>
    <Style x:key="ActiveStyle" TargetType="{x:Type TextBox}">
       <Setter Property="BorderBrush" Value="Green" />
       <Setter Property="BorderThickness" Value="2" />
    </Style>
   </Setter.Value>
  </Setter>
 </Style>
于 2009-07-26T08:22:20.950 に答える