2016-07-24 21 views
2

WPFのスタイルを定義していますTabControlTabItem。 マウス(左ボタン)を押してTabItemが選択されていないのにTriggerが見つからない場合、TabItemにわずかな「プッシュダウン」エフェクトを表示したいです。WPF TabItemスタイル(マウス左ボタンが押されている場合)

MultiTriggerIsMouseLeftButtonDownIsPressedのプロパティで定義しようとしましたが、いずれも認識されませんでした。マウス左ボタンがTabItemに押されたときに、アクションに入ったTriggerを設定する方法

<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> 


EDIT

私はEventTriggerを試してみましたが、私は

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

以下で任意の効果は、それが何らかの形でこのように達成することができます表示されないのですか?

+0

これは機能しません。 MouseActionをリッスンする場合は、EventTriggerを使用する必要があります。イベントトリガーは1つの条件のみを受け入れます。したがって、あなたの '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> 
関連する問題