Как заставить TextBlock появляться / исчезать, основываясь на связанном свойстве другого TextBlock? - PullRequest
0 голосов
/ 18 марта 2012

Предположим, что у меня есть два TextBlock элемента, один из которых является меткой для второго, который связан:

<TextBlock Margin="0,0,0,0" Text="Notes:" />
<TextBlock Margin="50,0,0,0" Text="{Binding Path=notes}" />

Я только хочу, чтобы эти два TextBoxes появились, если notes!="", чтотолько если есть что показать.Как можно поступить об этом?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

так много способов сделать это, DataTriggers, делать логику в вашей ViewModel, DependencyProp в коде позади, так что вы можете контролировать все через связывание без каких-либо триггеров и т. Д. или вот пример, выполняемый только в XAML.

Скопируйте / Вставьте / Запустите этот код:

<Control>
        <Control.Style>
            <Style TargetType="Control">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Control">
                            <StackPanel x:Name="stackPanel">
                                <TextBlock Margin="0,0,0,0" Text="Notes:" />
                                <TextBlock x:Name="txtNotes" Margin="50,0,0,0" Text="{Binding Path=notes}" />
                            </StackPanel>
                            <ControlTemplate.Triggers>
                                <Trigger SourceName="txtNotes" Property="TextBlock.Text" Value="">
                                    <Setter TargetName="stackPanel" Property="Control.Visibility" Value="Collapsed"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Control.Style>
    </Control>
1 голос
/ 18 марта 2012

Сначала создайте конвертер:

public class EmptyStringToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
                          CultureInfo culture)
    {
        return string.IsNullOrEmpty(value as string)
                   ? Visibility.Collapsed
                   : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, 
                              CultureInfo culture)
    {
        throw new InvalidOperationException();
    }
}

Затем сделайте ссылку на него (вы можете сделать это в ресурсах своего приложения, в ресурсах представления и т. Д .:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Converters="clr-namespace:MyConverterNamespace">
  <Converters:EmptyStringToVisibilityConverter 
      x:Key="EmptyStringToVisibilityConverter"/>
</ResourceDictionary>

Затем используйте еговаши элементы управления:

<TextBlock Margin="0,0,0,0" Text="Notes:"
           Visibility="{Binding notes,
               Converter={StaticResource EmptyStringToVisibilityConverter}"/>
<TextBlock Margin="50,0,0,0" Text="{Binding Path=notes}"
           Visibility="{Binding notes,
               Converter={StaticResource EmptyStringToVisibilityConverter}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...