gpt4 book ai didi

wpf - 如何将触发器与 SourceName 和 DataTrigger 结合使用?

转载 作者:行者123 更新时间:2023-12-03 20:19:51 26 4
gpt4 key购买 nike

在我的 WPF 控件中,我有以下两个触发器:

<Trigger
Property="Controls:TreeViewExItem.IsMouseOver"
Value="True"
SourceName="ElementGrid">


<DataTrigger
Binding="{Binding
RelativeSource={RelativeSource AncestorType={x:Type Controls:TreeViewEx}},
Path=HoverHighlighting}"
Value="False">

两者都为自己工作正常。但我需要这些的组合。我试过这个:
<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>

但它什么也没做。我在输出窗口中收到此消息:

System.Windows.Data Error: 17 : Cannot get 'IsMouseOver' value (type 'Boolean') from '' (type 'String'). BindingExpression:Path=(0); DataItem='String' (HashCode=1047858601); target element is 'TreeViewExItem' (Name=''); target property is 'NoTarget' (type 'Object') InvalidCastException:'System.InvalidCastException: Das Objekt des Typs "System.String" kann nicht in Typ "System.Windows.DependencyObject" umgewandelt werden.



这并不能告诉我任何事情。它将如何运作?

更新:完整的项目代码现在可以在我的 GitHub 存储库中查看。我对 MultiDataTrigger 的猜测目前位于 at .

最佳答案

我现在尝试了很多东西,但没有发现任何有用的东西。在有人证明我错之前,我必须假设 Triggers 和 DataTriggers 不能结合使用。

我的解决方案是不同的:我没有尝试从同一个触发器(需要不同的触发器类型)访问本地属性和父元素属性,而是将另一个 DependencyProperty 添加到我的子元素类并将其值绑定(bind)到父元素的属性。因此子元素不需要找到父元素的值——它总是拥有该值本身的当前副本。由于复制该值是在另一个地方完成的,它使触发器保持美观和小巧。 :-)

所以这就是我添加的 XAML 代码的样子。这是子项样式的新 setter :

<!-- 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}}}" />

这是在所有其他触发器已经存在的触发器部分中:
<!-- 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>

一旦工作,依赖属性和数据绑定(bind)就很棒。但在那之前,它可能是可怕的。

关于wpf - 如何将触发器与 SourceName 和 DataTrigger 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11686439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com