Как я могу применить стиль к элементу управления окна в WPF? - PullRequest
7 голосов
/ 26 марта 2009

Я задаю стиль для окна в App.xaml, например:

<Application x:Class="MusicRepo_Importer.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" StartupUri="TestMaster.xaml">
    <Application.Resources>

        <Style TargetType="Window">
            <Setter Property="WindowStyle" Value="None"></Setter>
        </Style>

    </Application.Resources>
</Application>

С помощью которого я хочу, чтобы в каждом окне значение свойства WindowStyle было установлено на None (чтобы удалить рамку и границу окон по умолчанию); Но это не работает.

Что мне здесь не хватает?

Ответы [ 2 ]

19 голосов
/ 26 марта 2009

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

В app.xaml / resources ..

<Style x:Key="MyWindowStyle" TargetType="Window">
    <Setter Property="WindowStyle" Value="None"></Setter>
</Style>

Тогда в window.xaml ..

<Window x:Class="MusicRepo_Importer.MyWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    Title="MyStyledWindow" Style="{StaticResource MyWindowStyle}">

Это должно сработать, но простое применение стиля с TargetType для Window в ресурсе не заставит Window использовать этот стиль, хотя, похоже, оно работает для других элементов.

Edit:
Нашел некоторую информацию относительно применения стилей по умолчанию к элементу окна.

Если вы укажете TargetType, все экземпляры этого типа будут иметь стиль применяется. Однако производные типы не будет ... кажется.

Из вопроса: Как установить стиль окна WPF по умолчанию в app.xaml?

Человек, который ответил на вопрос, имел интересную идею о наследовании от базового окна, к которому применен стиль.

7 голосов
/ 02 октября 2012

Я знаю, что этот вопрос довольно старый, но я все равно отвечу.

Вот код, который отлично работает для меня в C # 4.0. Он просто дублирует стиль для всех подклассов в словаре ресурсов.

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        if (this.Resources.Contains(typeof(Window)))
        {
            var types = Assembly.GetEntryAssembly().GetTypes();
            var subTypes = types.Where(x => x.IsSubclassOf(typeof(Window)));

            Style elementStyle = (Style)this.Resources[typeof(Window)];

            foreach (Type subType in subTypes)
            {
                if (!this.Resources.Contains(subType))
                {
                    this.Resources.Add(subType, elementStyle);
                }
            }
        }

        base.OnStartup(e);
    }
}

Теперь ваш стиль из App.xaml должен работать для всех окон.

p.s. Да, я знаю, что это не самый чистый или быстрый способ, но он работает. :)

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