2014-05-14 3 views
0

У меня есть сетка с ToggleButton. У ToggleButton есть ControlTemplate, и в этом ControlTemplate я определил Эллипс и Путь. Atm цвет на Эллипсе и Пути меняется, если свойство ToggleButtons IsMouseOver истинно. Теперь я хочу изменить цвет, если свойство Grids IsMouseOver также истинно. Но я не могу заставить его работать.Использование триггера с свойством от родителя

Мой код выглядит

   <Grid Height="26" 
    x:Name="GroupboxHeader" 
    Background="Blue"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    <ToggleButton Grid.Column="1" 
       HorizontalAlignment="Right" 
       Margin="0 0 5 0" 
       OverridesDefaultStyle="True" 
       Background="LightGray" 
       Height="19" 
       Width="19"> 
     <ToggleButton.Template> 
      <ControlTemplate> 
       <Grid> 
        <Grid.LayoutTransform> 
         <TransformGroup> 
          <TransformGroup.Children> 
           <TransformCollection> 
            <RotateTransform Angle="90" /> 
           </TransformCollection> 
          </TransformGroup.Children> 
         </TransformGroup> 
        </Grid.LayoutTransform> 
        <Ellipse x:Name="circle" 
          HorizontalAlignment="Center" 
          Height="19" 
          Stroke="White" 
          VerticalAlignment="Center" 
          Width="19" /> 
        <Path x:Name="arrow" 
         Data="M 1,1.5 L 4.5,5 L 8,1.5" 
         HorizontalAlignment="Center" 
         SnapsToDevicePixels="false" 
         Stroke="White" 
         StrokeThickness="2" 
         VerticalAlignment="Center" /> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" 
          Value="true"> 
         <Setter Property="Stroke" 
           TargetName="circle" 
           Value="LightGray" /> 
         <Setter Property="Stroke" 
           TargetName="arrow" 
           Value="LightGray" /> 
        </Trigger> 
        <DataTrigger Binding="{Binding ElementName=GroupboxHeader, Path=IsMouseOver}"> 
         <Setter Property="Stroke" 
           TargetName="circle" 
           Value="LightGray" /> 
         <Setter Property="Stroke" 
           TargetName="arrow" 
           Value="LightGray" /> 
        </DataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </ToggleButton.Template> 
    </ToggleButton> 
</Grid> 

ответ

1

Изменить ход Эллипс/путь к {TemplateBinding BorderBrush}, и вместо того, чтобы использовать TargetName в ваших триггеров изменить BorderBrush на кнопке. Таким образом вы можете добавить триггеры на сетке с TargetName, установленными на вашу кнопку переключения, чтобы добиться желаемого поведения.

EDIT:

Поскольку это не в шаблоне управления, TargetName не найти дочерние элементы. Вместо этого вы можете установить триггеры: <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType=Grid}}" Value="True"> внутри вашего стиля ToggleButton.

+0

Я изменил оба триггера, как вы сказали. IsMouseOver для ToggleButton работает, но IsMouseOver для Grid не работает. Такое же поведение, как и раньше:/ –

+0

Ваш второй подход работает очень хорошо! спасибо –