Как переопределить стили приложения в элементе управления wpf, созданном во время выполнения - PullRequest
0 голосов
/ 25 апреля 2009

Я пытаюсь создать элемент управления WPF во время выполнения, но не могу понять, как заставить его игнорировать стили, поступающие из ресурсов App.xml. Я попытался установить стиль в null и OverridesDefaultStyle в true, но не повезло. Настройки приложения устанавливают передний план на белый, и я не могу показаться, что для простоты установите его на что-либо еще.

        Label tb = new Label();
        tb.OverridesDefaultStyle = true;
        tb.Style = null;
        tb.Foreground = new SolidColorBrush(Colors.Black);
        this.Children.Add(tb);

Редактировать: По какой-то причине я никогда не мог заставить Label работать, но когда я переключился на текстовое поле, он работал нормально.

Спасибо за ваши ответы.

Ответы [ 2 ]

1 голос
/ 25 апреля 2009

Все, что вам нужно сделать, это установить Style в null, чтобы остановить его наследование. Затем вы можете установить Foreground на любое значение:

var tb = new TextBlock() { Text = "Hello" };
tb.Style = null;
tb.Foreground = Brushes.Blue;
this.Children.Add(tb);

Если это не работает для вас, я бы предположил, что что-то совершенно другое происходит.

PS. Используйте Brushes.Black вместо создания собственного SolidColorBrush. Мало того, что это чище, кисти также будут заморожены. Ваш код создает незамерзшую кисть, которая менее эффективна. Вы также можете заморозить его самостоятельно, позвонив на кисть Freeze().

1 голос
/ 25 апреля 2009

У меня работает следующий почти идентичный код:

  Label l = new Label();
  l.Content = "Fie!!!";
  l.Style = null;
  l.OverridesDefaultStyle = true;  // not required, see below
  l.Foreground = new SolidColorBrush(Colors.Blue);
  ((Grid)Content).Children.Add(l);

Однако из экспериментов кажется, что если вы установите OverridesDefaultStyle = true после , установив Стиль, все будет работать нормально. Но если вы установите OverridesDefaultStyle до , установив стиль, все пойдет не так. (Нет, я не знаю, почему это происходит! ухмылка ) Так что переместите установщик OverridesDefaultStyle в положение после установщика стиля или (поскольку это не требуется для нужного эффекта), просто удалите его. *

...