wpf databind IsVisible для TabControl.SelectedItem! = null - PullRequest
9 голосов
/ 21 июля 2009

У меня есть StackPanel, который я хочу сделать видимым, только когда SomeTabControl.SelectedItem != null. Как мне сделать это в привязке WPF?

Ответы [ 2 ]

13 голосов
/ 21 июля 2009

Вы можете сделать это без конвертера, используя стиль и триггер:

<StackPanel>
    <StackPanel.Style>
        <Style TargetType="{x:Type StackPanel}">
            <Setter Property="Visibility" Value="Visible" />
            <Style.Triggers>
                <DataTrigger
                    Binding="{Binding SelectedItem,ElementName=tabControl1}" 
                    Value="{x:Null}">
                    <Setter Property="Visibility" Value="Hidden" />
                </DataTrigger>
            <Style.Triggers>
        </Style>
    </StackPanel.Style>
</StackPanel>

Этот пример показывает StackPanel по умолчанию, но затем скрывает его, когда SelectedItem на tabControl1 равен нулю.

5 голосов
/ 21 июля 2009

Создайте конвертер, который преобразует обнуляемое значение в значение System.Windows.Visibility, и используйте его в привязке.

Например:

<StackPanel x:Name="myPanel" Visibility="{Binding Path=SelectedItem, Mode=OneWay, ElementName=SomeTabControl, Converter={StaticResource visibilityConverter}}" />

Код для класса конвертеров:

public class VisibilityConverter : IValueConverter
{
    #region [ IValueConverter ]

    public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        if( value == null )
            return System.Windows.Visibility.Collapsed;

        return System.Windows.Visibility.Visible;
    }

    public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        throw new NotSupportedException( );
    }

    #endregion
}

P.S. Это предполагает, что в XAML вашего элемента управления есть статический ресурс с именем visibilityConverter .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...