Применение глобальных стилей к списку

Я пытаюсь применить глобальный стиль ко всем ComboBox в моем приложении. Я делаю это, определяя стиль в моем файле App.xaml и определяя TargetType, который должен применять этот стиль ко всем элементам управления, которые имеют указанный тип. Однако, похоже, что мой стиль вообще не применяется.

Вот мой код:

App.xaml

<Application x:Class="Test.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Test"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <Style TargetType="{x:Type ComboBox}">
                <Setter Property="Background" Value="Red"></Setter>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

MainWindow.xaml

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ComboBox Margin="173,130,186,166"></ComboBox>
    </Grid>
</Window>

На данный момент у меня нет никакого кода, кроме кода по умолчанию, который VS генерирует для форм WPF.

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

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

2 ответа

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

Например:

<ResourceDictionary     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="{x:Type TextBox}">
        <Setter Property="Height" Value="25"/>
        <Setter Property="Background" Value="red"></Setter>
    </Style>
</ResourceDictionary>

Теперь вам просто нужно добавить ссылку в ваш App.Xaml, например так:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Views/Style/GlobalStyle.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Надеюсь, это поможет вам.

Хорошего дня.

Старайтесь избегать вложенного ResourceDictionary в App.Xaml. Исправьте таким образом:

<Application.Resources>
    <Style TargetType="{x:Type ComboBox}">
        <Setter Property="Background" Value="Red"></Setter>
    </Style>
</Application.Resources>
Другие вопросы по тегам