3

我已经实现了一个 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”属性。绑定表达式:路径=文件状态;DataItem='StackPanel'(名称='StackViewCount');目标元素是'StackPanel'(名称='StackViewCount');目标属性是“NoTarget”(类型“对象”)

那么我如何告诉绑定在 UserControl 而不是 stackpanel 中查找 FileState

现在,当我将条件更改为

<Condition Binding="{Binding Path=FileState}" Value="Uploading" />

我没有看到任何错误,但它仍然不起作用。

4

1 回答 1

2

既然FileState是你的财产,UserControl它是你的祖先,StackPanel你必须bind to ancestor喜欢:

<Condition Binding="{Binding Path=FileState, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="Uploading" />
于 2013-09-24T02:51:08.897 回答