【发布时间】:2012-06-29 15:23:32
【问题描述】:
我想通过Trigger 设置Border 的样式,以响应被拖动和简单的鼠标悬停。
更具体地说,我们有一个显示硬件端口(例如端口 1、端口 2 等)的项目列表,然后在它旁边显示连接到该端口的设备。对于正常的鼠标悬停事件,我们希望突出显示设备。但是,如果我们在拖放操作中,我们希望突出显示端口。
例如,这里有一些虚假的 MultiTriggers 描述了我想要做什么。它使用了一个名为IsDragInProgress 的虚假属性,我在这个例子中做了这个。这就是我想要实现的目标。
<DataTemplate x:Key="TestTemplate">
<DockPanel>
<Border x:Name="PortHighlight" DockPanel.Dock="Left">
<TextBlock>
<Run Text="{Binding PortName}" />
<Run Text=": " />
</TextBlock>
</Border>
<Border x:Name="DeviceHighlight">
<TextBlock Text="{Binding DeviceName}" />
</Border>
</DockPanel>
<DataTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsDragInProgress" Value="False" />
</MultiTrigger.Conditions>
<Setter TargetName="DeviceHighlight" Property="Background" Value="Yellow" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsDragInProgress" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="PortHighlight" Property="Background" Value="Yellow" />
</MultiTrigger>
</DataTemplate.Triggers>
</DataTemplate>
那么这可以做到吗?有没有我可以投票的现有财产来代替虚假的IsDragInProgress?
【问题讨论】:
-
我不相信 OnEnter 与您是否拖动有任何关系,因为它以任何一种方式触发。另外,这是一个事件,而不是一个属性,对吗?同样,我正在寻找可以测试是否拖拽的东西。
标签: wpf triggers drag-and-drop datatemplate