如何从App.xaml继承命名样式?

时间:2016-12-13 21:44:51

标签: wpf visual-studio-2010 xaml

为了帮助我的WPF应用程序有类似的感觉,我已经开始在应用程序级别使用样式:

<Application x:Class="MyApplication.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml">
<Application.Resources>
    <Style TargetType="Button">
        <Setter Property="Margin" Value="10"/>
        <Setter Property="Padding" Value="5"/>
        <Setter Property="MinWidth" Value="60"/>
    </Style>

    <Style TargetType="TextBox">
        <Setter Property="Margin" Value="10"/>
        <Setter Property="Padding" Value="5"/>
        <Setter Property="MinWidth" Value="60"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
    </Style>

    <Style TargetType="TextBlock">
        <Setter Property="Margin" Value="10"/>
        <Setter Property="Padding" Value="5"/>
        <Setter Property="MinWidth" Value="60"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
    </Style>
</Application.Resources>

现在这对我的大多数控件来说都很好用,但是我想更深入一点,为标题添加特定的样式类型。从每个窗口我都做到了:

<Window x:Class="myApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="150" Width="300">
<Window.Resources>
    <Style x:Key="HeaderStyle" TargetType="TextBlock">
        <Setter Property="Foreground" Value="Gray" />
        <Setter Property="FontSize" Value="24" />
    </Style>
</Window.Resources>
<StackPanel>
    <TextBlock Style="{StaticResource HeaderStyle}">Header 1</TextBlock>
    <TextBlock >Some content</TextBlock>
</StackPanel>

如何从App.xaml执行此操作?如果我想更改格式,请不要触摸每个窗口。

我觉得我首先要在窗口中添加相同的Style x:Key到App。然后将其添加到窗口

xmlns:app="clr-namespace:myApp"

如果这是对的,我不知道从哪里开始。这是我的一个镜头,黑暗试图让它工作

<TextBlock Style="{x:Type app:HeaderTextBlock}">Header 1</TextBlock>

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

你在这里遇到的问题: <TextBlock Style="{x:Type app:HeaderTextBlock}">Header 1</TextBlock>是您尝试添加对App.xaml的引用,但您不必这样做。

您可以使用此代码 <TextBlock Style="{StaticResource HeaderStyle}">Header 1</TextBlock>