Глобальные стили в WPF - PullRequest
       21

Глобальные стили в WPF

2 голосов
/ 17 сентября 2011

Я учусь использовать стили в WPF и, согласно информации, найденной в сети, если я определю стиль таким образом (с целевым типом):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style  TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Black"/>
    </Style>
</ResourceDictionary>

... этот стиль будет применяться ко всем кнопкам в моем приложении. Однако кажется, что мои кнопки остаются прежними. В главном окне я добавил словарь ресурсов в коллекцию ресурсов и вставил пару кнопок, однако мои кнопки все время выглядят одинаково. Вот код для главного окна:

<Window x:Class="MCTSTrainingChapter1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="GridResources.xaml"/>
                <ResourceDictionary Source="ButtonResources.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

    <DockPanel >
        <ToolBar DockPanel.Dock="Top" Height="26" Name="toolBar1"  >
            <Button x:Name="btnBold"  Click="Button_Click">Bold</Button>
            <Button Click="Button_Click_1">Italic</Button>
            <Slider Name="slider1" Minimum="2" Maximum="72" Width="100" ValueChanged="slider1_ValueChanged"></Slider>
        </ToolBar>
        <Grid Name="grid1" Background="{StaticResource GridBackgroundBrush}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="5"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <ListBox Grid.Column="0" Name="listBox1" SelectionChanged="listBox1_SelectionChanged" />
            <GridSplitter Grid.Column="1" Margin="0" Width="5" HorizontalAlignment="Left"/>
            <RichTextBox Grid.Column="2" Name="richTextBox1"/>
        </Grid>

    </DockPanel>
</Window>

Почему стиль кнопки не применяется?

Ответы [ 2 ]

5 голосов
/ 17 сентября 2011

Согласно ответу на этот вопрос: Настройка размеров кнопок панели инструментов с использованием стиля

Панель инструментов применяет свой собственный стиль к кнопке.Этот стиль доступен по ключу ресурса ToolBar.ButtonStyleKey.Настройте свой стиль с помощью этой клавиши, а не просто нацеливая на тип Button, и вы получите:

<Style x:Key="{x:Static ToolBar.ButtonStyleKey}" TargetType="Button">
    <Setter Property="Width" Value="100" />
</Style>
3 голосов
/ 17 сентября 2011

Уже есть ответ, связанный с глобальным стилем, если вы хотите явно определить свой стиль для каждой кнопки (возможно, в будущем вашего проекта), вам нужно назвать стиль:

<Style x:Key="buttonStyleOne" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="Black"/>
</Style>

а затем примените его к кнопке, которую вы хотите использовать стиль, с помощью:

<Button Style="{DynamicResource buttonStyleOne}">Content!</Button>
...