当样式触发器在xaml中触发时,将样式应用于多个控件

问题描述:

当用户输入信息时,我希望所有控件的外观和操作方式相同,因此我做了以下操作。当样式触发器在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

使用您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>