首页 > 解决方案 > 将元素属性绑定到以下元素属性

问题描述

我需要有两个元素,其中一个具有绑定到另一个元素属性的属性。例如:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
<Grid>
    <TextBox x:Name="first" Text="Hello" Visibility="{Binding Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=second}" />
    <TextBox x:Name="second" Background="Transparent"/>
</Grid>

这里的想法是,当我开始输入第二个文本框时,第一个文本框将消失。这项工作很好,但我在输出窗口中收到此警告:

System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=Text.IsEmpty; DataItem=null; target element is 'TextBox' (Name='first'); target property is 'Visibility' (type 'Visibility')

这可能是因为第一个文本框试图绑定到第二个文本框的属性,但第二个文本框还不存在,因为它是在第一个文本框之后创建的。当然,一旦创建了第二个文本框,这就会得到正确解决,但我仍然想消除警告。

如果我颠倒文本框元素的顺序,警告就会消失,但现在我的第一个文本框在我的第二个文本框之上,所以我无法输入第二个文本框。我已经尝试通过设置 Z 索引来解决这个问题,但这不起作用(文本框上没有直接的 ZIndex 属性,只有 Panel.ZIndex?)

标签: c#wpfbinding

解决方案


该警告纯粹是一个表面问题。如果你愿意,你可以通过在绑定中提供一个 FallbackValue 来摆脱它:

Visibility="{Binding Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=second, FallbackValue=Collapsed}


推荐阅读