2016-07-24 11 views
2

WPF 용 스타일을 정의하고 있습니다 TabControlTabItem. 마우스 (왼쪽 버튼)를 누르고 TabItem을 선택했지만 Trigger을 찾을 수없는 경우 TabItem에 약간의 "푸시 다운"효과를 표시하려고합니다.WPF TabItem 스타일이 마우스 왼쪽 버튼을 눌렀을 때

MultiTriggerIsMouseLeftButtonDownIsPressed 속성으로 정의하려고 시도했지만 어느 것도 인식되지 않습니다.

<Style TargetType="{x:Type TabItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
        <ControlTemplate TargetType="TabItem"> 
         <Border Name="bd" BorderThickness="1,1,0,0"> 
          <Grid> 
           <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" 
                ContentSource="Header"/>  
          </Grid> 
         </Border> 
         <ControlTemplate.Triggers> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsMouseLeftButtonDown" Value="True" /> <!--NOT RECOGNIZED--> 
            <Condition Property="IsSelected" Value="False" /> 
           </MultiTrigger.Conditions> 
           <Setter TargetName="bd" Property="Background" > 
            <Setter.Value> 
             <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
               <GradientStop Color="Green" Offset="0"/> 
               <GradientStop Color="Yellow" Offset="1"/> 
             </LinearGradientBrush> 
            </Setter.Value> 
           </Setter> 
          </MultiTrigger> 
         </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
</Style> 

어떻게 버튼을 마우스 왼쪽은 TabItem 아래로 눌렀을 때 행동으로 유도 할 수있는 Trigger를 설정하는 방법?


편집은 내가하지만

<EventTrigger RoutedEvent="UIElement.PreviewMouseLeftButtonDown"> 
    <BeginStoryboard> 
      <Storyboard> 
       <ColorAnimation Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="Green" Duration="0:0:3" /> 
      </Storyboard> 
    <BeginStoryboard/> 
<EventTrigger/> 

아래는이 어떻게 든이 방법으로 달성 할 수있는 모든 효과를 볼 수 없습니다 EventTrigger을 시도

?

+0

이것은 작동하지 않습니다. MouseAction을 듣고 싶다면'EventTrigger'를 사용해야합니다. 이벤트 트리거는 하나의 조건 만 수락합니다. 그러므로 당신의'IsSelected = False'는 작동하지 않을 것입니다. 해결 방법은'IsMouseLeftButtonDown' 대신'IsMouseOver'를 사용하는 것입니다. 호버 - 효과를 시뮬레이트합니다. – lokusking

+0

호버 효과가 있기 때문에 IsMouseOver가 올바르지 않습니다. 이미 올바르게 구현되었습니다. – Nuts

+0

EventTrigger에 대한 게시물을 편집했지만 작동하지 않습니다. – Nuts

답변

0

이 예제는 EventTriggers과 함께 작업하는 방법을 보여줍니다.

당신은 값이 매번 무시하고 있기 때문에, 그 Triggers에 완전히 강조 로직을 설정해야 할 수도의 Trigger 발생합니다.

<EventTrigger RoutedEvent="PreviewMouseDown" > 
    <EventTrigger.Actions> 
     <BeginStoryboard> 
      <Storyboard > 
       <ObjectAnimationUsingKeyFrames Storyboard.TargetName="bd" Storyboard.TargetProperty="Background" Duration="0:0:3" BeginTime="0" AutoReverse="True"> 
        <ObjectAnimationUsingKeyFrames.KeyFrames> 
         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Brushes.Green}" /> 
        </ObjectAnimationUsingKeyFrames.KeyFrames> 
       </ObjectAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger.Actions> 
</EventTrigger> 
<EventTrigger RoutedEvent="PreviewMouseUp" > 
    <EventTrigger.Actions> 
     <BeginStoryboard> 
      <Storyboard > 
       <ObjectAnimationUsingKeyFrames Storyboard.TargetName="bd" Storyboard.TargetProperty="Background" Duration="0:0:3" BeginTime="0" AutoReverse="True"> 
        <ObjectAnimationUsingKeyFrames.KeyFrames> 
         <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Brushes.Transparent}" /> 
        </ObjectAnimationUsingKeyFrames.KeyFrames> 
       </ObjectAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger.Actions> 
</EventTrigger>