2009-11-11 140 views
2

我想覆蓋元素觸發器,因此,單擊文本框時,它會更改父邊框的屬性。WPF觸發器更改父項屬性

但是父目標名不被識別。下面是代碼示例:

<Style x:Key="customstyle" TargetType="{x:Type local:customcontrol}"> 
    <Setter Property="Background" Value="{StaticResource DownGradientBrush}"/> 
    <Setter Property="BorderBrush" Value="{StaticResource DownGradientBorder}"/> 
    <Setter Property="Foreground" Value="{StaticResource TextBoxForeground}"/> 
    <Setter Property="HorizontalAlignment" Value="Center"/> 
    <Setter Property="VerticalAlignment" Value="Center"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:customcontrol}"> 
       <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition/> 
          <RowDefinition/> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="15"/> 
         </Grid.ColumnDefinitions> 
         <Border Grid.Column="0" 
           Grid.RowSpan="2" 
           HorizontalAlignment="Stretch"> 
    <TextBox x:Name="TextBox" 
      Grid.Column="0" 
      Grid.RowSpan="2" 
      Text="{Binding RelativeSource={x:Static RelativeSource.TemplatedParent}, Path=Value}" 
      Width="Auto" 
      Height="Auto"> 
     <TextBox.Style> 
      <Style BasedOn="{StaticResource StyleTextBox}" TargetType="{x:Type TextBox}"> 
       <Style.Triggers> 
        <Trigger Property="IsFocused" Value="True"> 
         <Setter TargetName="Bd" 
           Property="Background" 
           Value="{StaticResource CustomGradientBorder}" /> 
        </Trigger> 
        <Trigger Property="IsFocused" Value="True" /> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
    </TextBox> 
    </Border> 
    </Grid> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsFocused" Value="True"> 
      <Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource CustomGradientBorder}" /> 
     </Trigger> 
    </ControlTemplate.Triggers> 
    </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

回答

6

改變這樣的:

<ControlTemplate.Triggers> 
    <Trigger Property="IsFocused" Value="True" SourceName="TextBox"> 
    <Setter TargetName="Bd" Property="BorderBrush" Value="{StaticResource CustomGradientBorder}" /> 
    </Trigger> 
</ControlTemplate.Triggers> 
+0

謝謝,這樣做是正常的:) – immuner 2009-11-11 18:53:14

相關問題