代码之家  ›  专栏  ›  技术社区  ›  Stewbob

如何删除Visual Studio 2010中的控件大纲WPF?

  •  2
  • Stewbob  · 技术社区  · 14 年前

    我正在VS2010中创建一个WPF应用程序。我使用多层网格控件来执行类似于tab控件的功能。网格控件具有不透明(白色)背景。

    出现问题的原因是,无论我在设计窗口中的“前面”是哪个网格,我仍然可以看到位于顶部面板“后面”的其他网格上所有其他控件的所有轮廓。它在视觉上非常混乱。

    这只在设计时发生。在运行时,一切都很好。

    下面的屏幕截图显示了我的顶部网格,其中仅包含4个文本框和4个单选按钮,但显示了其他网格上所有其他控件的轮廓。

    alt text

    4 回复  |  直到 14 年前
        1
  •  3
  •   Ray Burns    14 年前

    在任何不希望看到其控件轮廓的网格上设置RenderTransform,例如:

    <Grid RenderTransform="1 0 0 1 10000 10000">
    

    <Grid my:OutOfThisWorld.WhenHidden="True">
    

    代码如下:

    public class OutOfThisWorld : DependencyObject
    {
      // GoAway
      public static bool GetGoAway(DependencyObject obj) { return (bool)obj.GetValue(GoAwayProperty); }
      public static void SetGoAway(DependencyObject obj, bool value) { obj.SetValue(GoAwayProperty, value); }
      public static readonly DependencyProperty GoAwayProperty = DependencyProperty.RegisterAttached("GoAway", typeof(bool), typeof(OutOfThisWorld), new UIPropertyMetadata
      {
        PropertyChangedCallback = (obj, e) =>
        {
          obj.SetValue(UIElement.RenderTransformProperty,
            (bool)e.NewValue ? new TranslateTransform(100000,10000) : null);
        }
      });
    
      // WhenHidden
      public static bool GetWhenHidden(DependencyObject obj) { return (bool)obj.GetValue(WhenHiddenProperty); }
      public static void SetWhenHidden(DependencyObject obj, bool value) { obj.SetValue(WhenHiddenProperty, value); }
      public static readonly DependencyProperty WhenHiddenProperty = DependencyProperty.RegisterAttached("WhenHidden", typeof(bool), typeof(OutOfThisWorld), new PropertyMetadata
      {
        PropertyChangedCallback = (obj, e) =>
        {
          if((bool)e.NewValue)
            BindingOperations.SetBinding(obj, GoAwayProperty,
              new Binding("Visibility")
              {
                RelativeSource=RelativeSource.Self,
                Converter = new IsHiddenConverter()
              });
        }
      });
    
      class IsHiddenConverter : IValueConverter
      {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
          return (Visibility)value == Visibility.Hidden;
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); }
      }
    }
    

    说到这里,您是否考虑过使用Visibility=Collapsed而不是Visibility=Hidden?可能更简单。

    我还必须强烈支持威尔的意见,即这是一个可怕的设计。你真的有多“坚持”吗?如果这是政治问题,我为你道歉。但从技术角度来看,用模板将其重构为真正的选项卡控件应该非常容易。

        2
  •  3
  •   Will Dean    14 年前

    我不知道如何关闭这些行,即使你可以,但我可以说每当我做了这类事情,无论是Win32 dialog、Winforms还是WPF,我 总是 后悔把东西堆成那样。

    您几乎可以肯定的是,最好将其拆分为单独的用户控件,以便分别处理各种“页面”。

    在我看来,盒子的问题是你真正问题的症状,而不是问题本身。

        3
  •  0
  •   Community Jaime Torres    7 年前

    here ? 你也许可以做一些类似的事情。。。

    或者在设计时,可以在代码后面设置所有的列/行定义?这应该能消除你所有的台词。。。然后,在对设计进行了主要排序之后,再将xaml放回原处。

        4
  •  0
  •   Simon_Weaver    11 年前