Как динамически скрыть / отключить вкладку ленты WPF? - PullRequest
1 голос
/ 31 августа 2011

Допустим, у меня есть название вкладки ленты A (name = "_ tabA") и B (name = "_ tabB").Как динамически отключить или скрыть вкладку A или B?

Я использую VS2010 с RibbonControlsLibrary.dll.

Ответы [ 2 ]

2 голосов
/ 31 августа 2011
<ribbon:RibbonTab Visibility="{Binding ShowThisRibbonTab, Converter=...}">

Где ShowThisRibbonTab - это свойство вашей ViewModel, а конвертер, скорее всего, BooleanToVisibilityConverter.

В качестве альтернативы, если вы не используете MVVM, вы можете просто дать ему имя и установить видимость

0 голосов
/ 18 сентября 2011

Без MVVM

Я мог бы легко скрыть / показать с _tabA.Visibility = Visibility.Collapsed или Visibility.Visible.

С MVVM

.xaml.cs code
  1. Makeкласс также наследуется от INotifyProperty
  2. Создание свойства для вызова события при изменении свойства
  3. Настройка DataContext.
  4. Создание кода преобразователя.

Основной код выглядит следующим образом:

public partial class MainWindow : RibbonWindow, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }

    public const string NamePropertyName = "VisibleA"; 
    private bool _visibleA = true;
    public bool VisibleA
    {
        get
        {
            return _visibleA;
        }
        set
        {
            _visibleA = value;
            RaisePropertyChanged(NamePropertyName); 
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    } 
}

Код преобразователя выглядит следующим образом

[ValueConversion(typeof(bool), typeof(Visibility))]
internal class CheckVisibleA : System.Windows.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool? val = value as bool?;
        string param = parameter as string;

        if (value != null)
        {
            if (val == true)
            {
                return Visibility.Visible;
            }
        }

        return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Код .xaml

Этот XAML имеет две вкладки ленты: _ribboHome и _ribbonHelp.А свойство «VisibleA» контролирует видимость.Когда я нажимаю флажок, свойство VisibleA включается / выключается, и _ribbonHome соответственно становится видимым / свернутым.

<ribbon:Ribbon DockPanel.Dock="Top" Title="teusje.wordpress.com" >
    <ribbon:RibbonTab Header="Home" Name="_ribbonHome" Visibility="{Binding Path=VisibleA, Converter={StaticResource CheckVisibleA}, ConverterParameter=Show}">
        <ribbon:RibbonGroup Name="Clipboard" Header="Clipboard">
            <ribbon:RibbonButton Command="{StaticResource hwc}" CommandParameter="Hello, smcho" Label="Copy" LargeImageSource="Images/LargeIcon.png" /> 

        </ribbon:RibbonGroup>
    </ribbon:RibbonTab>
    <ribbon:RibbonTab Header="Help">
        <ribbon:RibbonGroup Name="_ribbonHelp" Header="Help this">
            <ribbon:RibbonButton Command="{StaticResource hwc}" CommandParameter="Hello, smcho" Label="Copy Help" LargeImageSource="Images/LargeIcon.png"/>
            <ribbon:RibbonCheckBox IsChecked="{Binding Path=VisibleA}"/>
        </ribbon:RibbonGroup>
    </ribbon:RibbonTab>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...