【问题标题】:WPF TabItem style when mouse left button is down鼠标左键按下时的 WPF TabItem 样式
【发布时间】:2016-11-28 02:53:04
【问题描述】:

我正在为 WPF TabControl TabItem 定义一个样式。 当按下鼠标(左键)并且未选择 TabItem 但我找不到 Trigger 时,我想在 TabItem 上显示轻微的“下推”效果。

我尝试用IsMouseLeftButtonDownIsPressed 属性定义MultiTrigger,但没有一个被识别。

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

如何设置TriggerTabItem 上按下鼠标左键时生效?


编辑

我尝试了EventTrigger,但我没有看到下面的任何效果

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

可以通过这种方式以某种方式实现吗?

【问题讨论】:

  • 这行不通。如果你想监听 MouseAction,你必须使用EventTrigger。事件触发器只接受一个条件。因此,您的 IsSelected=False 将不起作用。解决方法可能是使用IsMouseOver 而不是IsMouseLeftButtonDown。这将模拟悬停效果
  • IsMouseOver 在这里是不正确的,因为它会给你一个悬停效果。我已经正确实施了。
  • 编辑了 EventTrigger 的帖子,但无法正常工作

标签: wpf tabitem multitrigger


【解决方案1】:

此示例向您展示如何使用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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2010-09-27
    相关资源
    最近更新 更多