【问题标题】:How to hide a panel? [closed]如何隐藏面板? [关闭]
【发布时间】:2013-08-01 11:43:20
【问题描述】:

!我正在使用 Wpf。我想显示两个面板,如果一个是可见的,另一个应该隐藏。两者应处于相同的边距。下面的图片将详细解释我的问题。

谢谢, 安妮

谁能指导我如何编码?

【问题讨论】:

  • 是请求还是问题?有什么问题?你试过什么?什么失败了?
  • 尝试切换面板的黑白可见性....
  • 你尝试什么?粘贴一些代码
  • 安妮,请了解 WPF 控件的类层次结构。 Panel 是 UIElement,因此继承了 Visiblity 属性(请参阅msdn.microsoft.com/en-us/library/…)。
  • 安妮,你试过什么?这在 WPF 中非常简单,但我们需要知道您是否尝试过某些东西,或者您是否正在寻找更深入的解释。

标签: c# .net wpf


【解决方案1】:

试试这样的...

        newButton.Click += (o, ev) =>
        { 
            panelA.Visibility = System.Windows.Visibility.Hidden;
            panelB.Visibility = System.Windows.Visibility.Visible;
        }
        closeButton.Click += (o, ev) =>
        {
            panelB.Visibility = System.Windows.Visibility.Hidden;
            panelA.Visibility = System.Windows.Visibility.Visible;
        };

【讨论】:

    【解决方案2】:

    我没有VS,所以应该是这样的

      <Button x:Name="ToggleButton" Click="ToggleButton_Click"></Button>
    
    
    
     private void ToggleButton_Click(object sender, RoutedEventArgs e)
            {
                if (Panel1.Visibility == System.Windows.Visibility.Visible)
                {
                    Panel2.Visibility = System.Windows.Visibility.Visible;
                    Panel1.Visibility = System.Windows.Visibility.Collapsed;
                }
                else
                {
                    Panel2.Visibility = System.Windows.Visibility.Collapsed;
                    Panel1.Visibility = System.Windows.Visibility.Visible;
                }
            }
    

    【讨论】:

    • 命名空间应该是System.Windows,不是吗?
    • 哦,我的错,进入了 Windows 8 应用商店
    • System.Windows.Visibility,确切地说。
    • 我猜现在还好
    • 这是使用 WinRT 的结果:p
    【解决方案3】:

    代码很简单:

    Panel1.Visibility = System.Windows.Visibility.Hidden;
    Panel2.Visibility = System.Windows.Visibility.Visible;
    

    【讨论】:

    • 这里是 Hidden 而不是 Collapsed 合适的选择吗?问题中的绘图看起来不像其他面板的空间应该保留。
    【解决方案4】:

    使用此可见性转换器

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       bool bValue = (bool)value;
       if (bValue)
         return Visibility.Visible;
       else
         return Visibility.Collapsed;
    }
    

    【讨论】:

      【解决方案5】:

      试试这个(假设您使用的是 MVVM 模式)

      将两个堆栈面板的可见性与 2 个公共属性(布尔值)绑定。并在两者的 set 属性上,检查其 visibility==true 然后将其他控件的可见性设置为 false。

      使用以下可见性转换器

      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
      {
          bool bValue = (bool)value;
          if (bValue)
              return Visibility.Visible;
          else
              return Visibility.Collapsed;
      }
      

      在 xaml 上,您应该将此堆栈面板的可见性绑定为

      Visibility="{Binding Panel1Visibility,Converter={StaticResource BoolToVisibilityConverter}}"
      

      【讨论】:

      • WPF's visibility 不是布尔值。
      • 是的,我知道。你必须为此编写转换器。 BooleanToVisbility 转换器。
      • 没错。您的回答应该提到,而不是说明不可能的“将其他控件的可见性设置为 false”。
      • 使用这个公共对象 Convert(object value, Type targetType, object parameter, CultureInfoculture) { bool bValue = (bool)value; if (bValue) 返回 Visibility.Visible;否则返回 Visibility.Collapsed; }
      • 我认为现在答案很好。是吗?
      【解决方案6】:

      简单的把 panel1.hide() 和 panel2.show 放进去

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      相关资源
      最近更新 更多