2014-05-14 3 views
0

ToggleButton이있는 그리드가 있습니다. ToggleButton에는 ControlTemplate이 있고이 ControlTemplate에는 타원과 패스를 정의했습니다. Atm ToggleButtons IsMouseOver 속성이 true이면 Ellipse 및 Path의 색상이 변경됩니다. 이제 Grid IsMouseOver 속성이 true 일 경우 색상을 변경하고 싶습니다. 그러나 나는 그것을 작동시킬 수 없다.부모로부터 속성을 가진 트리거 사용

   <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이있는 그리드에 트리거를 추가하여 토글 버튼을 설정하여 원하는 동작을 얻을 수 있습니다.

편집 :이 같이

가 컨트롤 템플릿에없는, TargetName는 자식 요소를 찾을 것입니다. 대신 트리거를 ToggleButton 스타일의 <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType=Grid}}" Value="True">으로 설정할 수 있습니다.

+0

내가 말한 것처럼 두 가지 모두를 변경했습니다. ToggleButton의 IsMouseOver가 작동하지만 Grid의 IsMouseOver가 작동하지 않습니다. 이전과 같은 동작 :/ –

+0

두 번째 방법이 효과적입니다. 고맙습니다 –

관련 문제