Может ли окно WPF наследовать значения свойств из окна своего владельца? - PullRequest
1 голос
/ 18 ноября 2009

Я бы хотел, чтобы дочерние окна в моем приложении наследовали свойства зависимостей WPF от своего родительского окна.

Если я установлю TextOptions.TextRenderingMode = "ClearType" в главном окне (я использую WPF 4), это значение будет применяться ко всем дочерним элементам управления окна. Как сделать так, чтобы эти значения также применялись ко всем дочерним окнам? (Окно экземпляров с владельцем установлено в моем главном окне)

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

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Если вы хотите установить его один раз и оставить его, просто добавьте стиль в свой App.xaml внутри тега <ResourceDictionary>:

<ResourceDictionary>
  ...
  <Style TargetType="{x:Type Window}">
    <Setter Property="TextOptions.RenderingMode" Value="ClearType">
  </Style>
  ...
</ResourceDictionary>

Если вы действительно хотите изменить его с течением времени, вы можете привязать его к главному окну:

<ResourceDictionary>
  ...
  <Style TargetType="{x:Type Window}">
    <Setter Property="TextOptions.RenderingMode" Value="{Binding MainWindow.(TextOptions.RenderingMode), Source="{x:Static Application.Current}">
  </Style>
  ...
</ResourceDictionary>

и убедитесь, что вы установили его в главном окне явно, чтобы избежать самостоятельной ссылки:

<Window TextOptions.RenderingMode="ClearType" ...>

Теперь любые динамические изменения в TextOptions.RenderingMode главного окна также будут влиять на все остальные окна. Но простой фиксированный стиль лучше всего подходит для большинства целей.

Существуют и другие решения для его динамического связывания, если вам все равно, что оно будет управляться значением главного окна, например, вы можете использовать {DynamicResource ...} в своем стиле или привязать к свойству статического объекта.

Обновление

Простое добавление стиля для Window в ваш App.xaml не работает, если вы используете подклассы Window вместо простых объектов Window.

Чтобы разрешить определенный вами стиль для всех подклассов Window, добавьте следующий вызов OverrideMetadata в конструктор вашего приложения (обычно в App.xaml.cs) после InitializeComponent ():

public App()
{
  InitializeComponent();
  FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
  {
    DefaultValue = FindResource(typeof(Window))
  });
}
0 голосов
/ 18 ноября 2009

Вы можете использовать ресурс в стиле , чтобы присвоить одно и то же свойство нескольким окнам.

...