MultiDataTrigger不使用绑定路径条件

时间:2013-09-24 00:11:14

标签: c# wpf xaml user-controls custom-controls

我已经实现了一个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" />

我没有看到任何错误,但仍然无效。

1 个答案:

答案 0 :(得分:2)

由于FileStateUserControl的属性,而且它是StackPanel的祖先,您必须bind to ancestor喜欢:

<Condition Binding="{Binding Path=FileState, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="Uploading" />