将元素属性绑定到后续元素属性

时间:2018-11-18 15:36:35

标签: c# wpf binding

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

<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吗?)

1 个答案:

答案 0 :(得分:0)

警告纯粹是表面上的问题。 如果需要,可以通过在绑定中提供FallbackValue来摆脱它:

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