【发布时间】:2016-11-28 02:53:04
【问题描述】:
我正在为 WPF TabControl TabItem 定义一个样式。
当按下鼠标(左键)并且未选择 TabItem 但我找不到 Trigger 时,我想在 TabItem 上显示轻微的“下推”效果。
我尝试用IsMouseLeftButtonDown 和IsPressed 属性定义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>
如何设置Trigger 在TabItem 上按下鼠标左键时生效?
编辑
我尝试了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