Как удалить контуры управления в Visual Studio 2010, WPF? - PullRequest
2 голосов
/ 08 ноября 2010

Я создаю приложение WPF в VS2010. Я использую несколько элементов управления сеткой, наложенных друг на друга, чтобы выполнять функции, аналогичные элементам управления вкладками. Элементы управления сеткой имеют непрозрачный (белый) фон.

Проблема возникает из-за того, что независимо от того, какая сетка у меня «спереди» в окне дизайна, я все равно вижу все контуры всех других элементов управления на других сетках, которые «находятся» за верхней панелью. Это чрезвычайно визуально сбивает с толку.

Это происходит только во время разработки. Во время выполнения все отображается очень хорошо.

Как отключить контуры всех других элементов управления?

На снимке экрана ниже показана моя верхняя сетка, которая содержит только 4 текстовых поля и 4 переключателя, но показывает контуры всех других элементов управления на других сетках.

alt text

Ответы [ 4 ]

3 голосов
/ 15 ноября 2010

Я не знаю, как отключить линии, или даже если вы можете, но я могу сказать, что когда бы я ни делал такие вещи, будь то диалог Win32, Winforms или WPF, я всегда жалею, что так накапливался.

Вам почти наверняка было бы лучше разделить это на отдельные пользовательские элементы управления, чтобы различные «страницы» обрабатывались отдельно.проблема с коробками является признаком вашей реальной проблемы, а не самой проблемы.

3 голосов
/ 19 ноября 2010

Установите 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(); }
  }
}

Как это работает: Настройка OutOfThisWorld.WhenHidden создает привязку к свойству OutOfThisWorld.GoAwayтаким образом, что когда видимость цели «Скрыта», свойство GoAway имеет значение true.Когда GoAway на самом деле сбывается, добавляется RenderTransform.

Сказав все это, вы рассматривали возможность использования Visibility = Collapsed вместо Visibility = Hidden?Это может быть проще.

Я также должен решительно поддержать замечание Уилла, что это ужасный замысел.Насколько ты "застрял с этим"?Если это политическая вещь, я извиняюсь за вас.Но с технической точки зрения преобразование этого в реальный элемент управления вкладками с шаблоном должно быть очень простым.

0 голосов
/ 01 января 2014

Почему бы не поместить каждую «вкладку» в пользовательский элемент управления, тогда вы можете редактировать их отдельно?

0 голосов
/ 15 ноября 2010

Как насчет проверки ответа здесь ?Возможно, вы сможете сделать что-то в этом духе ...

или, пока вы разрабатываете, вы можете вместо этого настроить все определения столбцов / строк в коде?Это должно избавить вас от всех ваших строк ... Затем верните xaml обратно, как только ваш проект будет в основном отсортирован.

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