Итак, у меня есть несколько страниц XAML с различными элементами управления, большинство из которых с TextBlock, указывающим на предполагаемый контент.Как:
<TextBlock x:Name="txbCustomerName"
Text="Customer Name"/>
<TextBox x:Name="txtCustomerName"
Text="{Binding DataObject.CustomerName}"/>
Я нахожусь в процессе замены TextBlocks на Labels, что будет выглядеть так:
<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}}"/>
Вы заметите, что привязка для видимости моей метки связана с тем же элементом, что и цель.вместо нацеливания на тот же элемент данных, что и TextBlock.Я чувствую, что она концентрирует соответствующую информацию в TextBox вместо того, чтобы распространять ее на оба элемента управления.
Все это работает нормально.Тем не менее, я не могу избавиться от ощущения, что мог бы пойти еще дальше, если бы нашел способ применить эту привязку к свойству TextBox непосредственно через свойство Target метки вместо повторного использования имени TextBox.
Вот так, за исключением того, что он не работает, потому что Source не является свойством зависимости:
Visibility="{Binding Path=Visibility, Source={Binding Path=Target, RelativeSource={RelativeSource Self}}}"
Как я уже сказал, это не работает.Тем не менее, я надеюсь, что это передает смысл того, что я пытаюсь.
Конечным шагом после этого, конечно же, будет перевод Visibility в стиль меток по умолчанию, поэтому, если есть способ сделать это, я бы хотел узнать об этом.