ygo*_*goe 5 wpf xaml triggers multidatatrigger
在我的 WPF 控件中,我有以下两个触发器:
<Trigger
Property="Controls:TreeViewExItem.IsMouseOver"
Value="True"
SourceName="ElementGrid">
Run Code Online (Sandbox Code Playgroud)
和
<DataTrigger
Binding="{Binding
RelativeSource={RelativeSource AncestorType={x:Type Controls:TreeViewEx}},
Path=HoverHighlighting}"
Value="False">
Run Code Online (Sandbox Code Playgroud)
两者本身都工作得很好。但我需要这些的结合。我试过这个:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition
Binding="{Binding
RelativeSource={RelativeSource AncestorType={x:Type Controls:TreeViewEx}},
Path=HoverHighlighting}"
Value="True"/>
<Condition
Binding="{Binding
(Controls:TreeViewExItem.IsMouseOver),
Source=ElementGrid}"
Value="True"/>
</MultiDataTrigger.Conditions>
Run Code Online (Sandbox Code Playgroud)
但它什么也没做。我在输出窗口中收到此消息:
System.Windows.Data 错误:17:无法从“”(类型“字符串”)获取“IsMouseOver”值(类型“布尔”)。绑定表达式:路径=(0); DataItem='字符串' (HashCode=1047858601); 目标元素是 'TreeViewExItem' (Name=''); 目标属性为“NoTarget”(类型“Object”) InvalidCastException:“System.InvalidCastException:Das Objekt des Typs“System.String”可以在 Typ“System.Windows.DependencyObject”umgewandelt werden 中使用。
这并没有告诉我任何事情。它将如何运作?
更新:完整的项目代码现在可以在我的 GitHub 存储库中查看。我对 MultiDataTrigger 的猜测当前位于。
我现在已经尝试了很多东西,但没有发现任何有效的方法。在有人证明我错了之前,我必须假设触发器和数据触发器不能组合。
我的解决方案是不同的:我没有尝试从同一触发器访问本地属性和父元素属性(需要不同的触发器类型),而是向我的子元素类添加了另一个 DependencyProperty 并将其值绑定到父元素的属性。因此,子元素不需要查找父元素值 - 它始终具有该值本身的当前副本。由于复制该值是在另一个地方完成的,因此它可以使触发器保持良好且较小的状态。:-)
这就是我添加的 XAML 代码的样子。这是子项样式的新设置器:
<!-- Pass on the TreeViewEx' HoverHighlighting value to each item
because we couldn't access it otherwise in the triggers -->
<Setter
Property="HoverHighlighting"
Value="{Binding (Controls:TreeViewEx.HoverHighlighting),
RelativeSource={RelativeSource
AncestorType={x:Type Controls:TreeViewEx}}}" />
Run Code Online (Sandbox Code Playgroud)
这是在触发器部分,所有其他触发器都已经在其中:
<!-- Set the border and background when the mouse is located over
the item and HoverHighlighting is active -->
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition
Property="Controls:TreeViewExItem.HoverHighlighting" Value="True"/>
<Condition
Property="Controls:TreeViewExItem.IsMouseOver" Value="True"
SourceName="ElementGrid"/>
</MultiTrigger.Conditions>
Run Code Online (Sandbox Code Playgroud)
依赖属性和数据绑定一旦发挥作用就非常有用。但在那之前,情况可能会很可怕。
| 归档时间: |
|
| 查看次数: |
6063 次 |
| 最近记录: |