Применение глобальных стилей к списку
Я пытаюсь применить глобальный стиль ко всем 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>