我已经实现了WPF用户控件,而我想在此处实现的功能是在主网格上的鼠标悬停时应隐藏一些堆栈面板。而且我需要有多个触发条件。尽管四处张望,但我找不到我做错了什么。 UserControl资源如下
<UserControl.Resources>
<Style x:Key="StackViewStyle" TargetType="{x:Type StackPanel}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource AncestorType=Grid},Path=IsMouseOver}" Value="True" />
<Condition Binding="{Binding Path=FileState, RelativeSource={RelativeSource Self}}" Value="Uploading" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Collapsed"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
数据绑定工作正常,因为当我放入测试标签以检查其值时,它正在“上传”。如果我删除FileState Condition,它将开始工作。我正在使用它
<StackPanel Name="StackViewCount" Style="{StaticResource StackViewStyle}">
...
</StackPanel>
在查看输出窗口时,我发现此错误
BindingExpression路径错误:在“对象”“ StackPanel”(名称=“ StackViewCount”)上找不到“ FileState”属性。 BindingExpression:Path = FileState; DataItem ='StackPanel'(Name ='StackViewCount');目标元素是'StackPanel'(Name ='StackViewCount');目标属性为“ NoTarget”(类型“ Object”)
那么我怎样才能告诉绑定在UserControl中查找FileState而不是stackpanel
现在当我将条件更改为
<Condition Binding="{Binding Path=FileState}" Value="Uploading" />
我没有看到任何错误,但仍然无法正常工作。
最佳答案
由于FileState
是UserControl
的属性,并且是StackPanel
的祖先,因此必须像bind to ancestor
所示:
<Condition Binding="{Binding Path=FileState, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="Uploading" />