2012-03-26 52 views
1

當用戶輸入信息時,我希望所有控件的外觀和操作方式相同,因此我做了以下操作。當樣式觸發器在xaml中觸發時,將樣式應用於多個控件

標籤和TextBox控件是一個StackPanel爲:

<StackPanel Style="{StaticResource ResourceKey=myInput}" HorizontalAlignment="Left"> 
     <Label Content="Label" Name="label1" /> 
     <TextBox Name="textBox1" ></TextBox> 
    </StackPanel> 

風格「myInput」是:

<Style x:Key="myInput" TargetType="{x:Type StackPanel}"> 
    <Style.Resources> 
      <Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}"> 
       <Setter Property="FontSize" Value="12" /> 
      </Style> 
      <Style TargetType="{x:Type TextBox}"> 
       <Setter Property="Margin" Value="5,-5,2,2"></Setter> 
       <Setter Property="Height" Value="23"/> 
       <Setter Property="VerticalAlignment" Value="Top"/> 
       <Style.Triggers> 
        <Trigger Property="IsFocused" Value="true"> 
         <Setter Property="Background" Value="Blue" >         
         </Setter>       
        </Trigger> 
       </Style.Triggers> 
      </Style> 
    </Style.Resources> 
</Style> 

現在每當我這種風格適用於有一個StackPanel時間標籤和文本框的文本框的背景變爲藍色時,它會收到焦點。

如何在事件發生時將標籤的fontweight設置爲粗體?我想用xaml來做到這一點。

+0

您是否在尋找通過XAML設置大膽fontWeight設置父StackPanel內?像這樣:。還是你想在事件上實現風格改變? – 2012-03-26 19:31:39

+0

我想在文本框獲得焦點時這樣做。所以是的,我想改變事件的風格。標籤將始終是文本框的兄弟,也許我可以使用某種相對綁定。 – 2012-03-26 19:34:53

回答

2

使用您Label一個DataTrigger看起來,看看鍵盤焦點是同時包含對象

<Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}"> 
    <Setter Property="FontSize" Value="12" /> 
    <Style.Triggers> 
     <DataTrigger Value="True" Binding="{Binding IsKeyboardFocusWithin, 
      RelativeSource={RelativeSource AncestorType={x:Type StackPanel}}}"> 
      <Setter Property="FontWeight" Value="Bold" /> 
     </Trigger> 
    </Style.Triggers> 
</Style>