WPF-是否可以将标签的属性(可见性)绑定到标签的目标?

时间:2018-10-22 08:30:00

标签: wpf xaml binding label visibility

因此,我有许多带有各种控件的XAML页面,其中大多数带有指示所需内容的TextBlock。喜欢:

<TextBlock x:Name="txbCustomerName"
           Text="Customer Name"/>

<TextBox x:Name="txtCustomerName"
         Text="{Binding DataObject.CustomerName}"/>

我正在用标签替换TextBlocks,它看起来像这样:

<Label x:Name="lblCustomerName"
       Content="Customer Name"
       Target="{Binding ElementName=txtCustomerName}"/>

<TextBox x:Name="txtCustomerName"
         Text="{Binding DataObject.CustomerName}"/>

到目前为止,太好了。但是,有些控件并不总是可见的。因此,关联的TextBlock也将遵循以下条件:

<TextBlock x:Name="txbInvoiceAddressStreet"
           Text="Street Name"
           Visibility="{Binding DataObject.DifferentInvoiceAddress, Converter={StaticResource BoolToVisibility}}"/>

<TextBox x:Name="txtInvoiceAddressStreet"
         Text="{Binding DataObject.InvoiceAddressStreet}"
         Visibility="{Binding DataObject.DifferentInvoiceAddress, Converter={StaticResource BoolToVisibility}}"/>

我或多或少希望标签的可见性在默认情况下会自动地等于其目标的可见性,但是显然我必须为此而努力。很好,毕竟这是我的工作。

此初稿非常有用:

<Label x:Name="txbInvoiceAddressStreet"
       Content="Street Name"
       Target="{Binding ElementName=txtInvoiceAddressStreet}"
       Visibility="{Binding Path=Visibility, ElementName=txtInvoiceAddressStreet}"/>

<TextBox x:Name="txtInvoiceAddressStreet"
         Text="{Binding DataObject.InvoiceAddressStreet}"
         Visibility="{Binding DataObject.DifferentInvoiceAddress, Converter={StaticResource BoolToVisibility}}"/>

您会注意到,“标签可见性的绑定”链接到与Target相同的元素,而不是与TextBlock相同的数据元素。我觉得它会将相关信息集中在TextBox中,而不是将其分散在两个控件上。

一切正常。但是,如果我找到了一种直接通过Label的Target属性而不是重用TextBox名称将Binding应用于TextBox属性的方法,我仍然不禁会进一步前进。

就像这样,除了因为Source不是依赖项属性而无法工作之外,其他方法都不起作用:

Visibility="{Binding Path=Visibility, Source={Binding Path=Target, RelativeSource={RelativeSource Self}}}"

正如我所说,这是行不通的。但是,我希望它能传达我正在寻找的东西。

这之后的最终步骤当然是将“可见性”移至“标签”的默认样式,因此,如果有一种方法,我想了解一下。

1 个答案:

答案 0 :(得分:0)

在绑定路径中包括Target属性:

<Label Visibility="{Binding Path=Target.Visibility, RelativeSource={RelativeSource Self}}"/>

它可以是样式的一部分:

<Style TargetType="Label">
    <Setter Property="Visibility"
            Value="{Binding Path=Target.Visibility, RelativeSource={RelativeSource Self}}"/>
</Style>