如何动态隐藏/禁用WPF功能区选项卡?

时间:2011-08-30 20:13:41

标签: c# wpf xaml ribbon

假设我有一个功能区选项卡名称A(name =“_ tabA”)和B(name =“_ tabB”)。 如何动态禁用或隐藏选项卡A或B?

我将VS2010与RibbonControlsLibrary.dll一起使用。

2 个答案:

答案 0 :(得分:2)

<ribbon:RibbonTab Visibility="{Binding ShowThisRibbonTab, Converter=...}">

其中ShowThisRibbonTab是ViewModel的属性,转换器最有可能是BooleanToVisibilityConverter

或者,如果你没有做MVVM,你可以给它一个名字并设置可见性

答案 1 :(得分:0)

没有MVVM

我可以使用_tabA.Visibility = Visibility.CollapsedVisibility.Visible轻松隐藏/显示。

使用MVVM

.xaml.cs代码
  1. 使类继承自INotifyProperty
  2. 在修改属性时设置属性以引发事件
  3. 设置DataContext。
  4. 制作转换器代码。
  5. 主要代码如下

    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相应地进行visbile /折叠。

    <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>