我已经实现了一个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条件它开始工作。我正在使用它作为
<StackPanel Name="StackViewCount" Style="{StaticResource StackViewStyle}">
...
</StackPanel>
在查看输出窗口时发现此错误
BindingExpression路径错误:'object'''StackPanel'(Name ='StackViewCount')'上找不到'FileState'属性。 BindingExpression:路径= FileState; DataItem ='StackPanel'(Name ='StackViewCount'); target元素是'StackPanel'(Name ='StackViewCount'); target属性是'NoTarget'(类型'Object')
那么我怎么能告诉绑定在UserControl中查找FileState而不是stackpanel
现在我改变了条件
<Condition Binding="{Binding Path=FileState}" Value="Uploading" />
我没有看到任何错误,但仍然无效。
答案 0 :(得分:2)
由于FileState
是UserControl
的属性,而且它是StackPanel
的祖先,您必须bind to ancestor
喜欢:
<Condition Binding="{Binding Path=FileState, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="Uploading" />