如何在wpf应用程序

时间:2016-04-17 16:26:32

标签: c# wpf visual-studio xaml

我想在一个地方设置我wpf应用程序所有窗口中所有数据网格的所有窗口和样式的背景图像

我的app.xaml文件中有以下代码

<Application.Resources>

    <!--Styles for woindow-->
    <ImageBrush x:Key="WindowBackgroungImage" ImageSource="Icons\clinic.jpg"/>
    <LinearGradientBrush x:Key="WindowBorderBrush" EndPoint="0.5,1" StartPoint="0.5,0" >
        <GradientStop Color="Black" Offset="0"/>
        <GradientStop Color="White" Offset="1"/>
    </LinearGradientBrush>

    <!--Styles for Data Grid-->
    <Style x:Key="DGCHeaderStyle" TargetType="DataGridColumnHeader">
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="FontSize" Value="14" />
        <Setter Property="FontFamily" Value="Calibri" />
        <Setter Property="FontWeight"  Value="SemiBold" />
        <!--<Setter Property="HorizontalAlignment" Value="Center" />-->
        <Setter Property="HorizontalContentAlignment" Value="Center" />
    </Style>

    <LinearGradientBrush x:Key="DataGridRowBackground" EndPoint="195.5,455" StartPoint="195.5,0" MappingMode="Absolute" SpreadMethod="Repeat">
        <GradientStop Color="Black" Offset="0"/>
        <GradientStop Color="#FF0FC9E6" Offset="1"/>
        <GradientStop Color="#FF6CA3AC"/>
    </LinearGradientBrush>
    <RadialGradientBrush x:Key="DataGridAlternatingRowBackground" SpreadMethod="Reflect" Center="195.5,227.5" GradientOrigin="195.5,227.5" MappingMode="Absolute" RadiusY="227.5" RadiusX="195.5">
        <GradientStop Color="Black" Offset="0"/>
        <GradientStop Color="#FFEEA21F" Offset="1"/>
        <GradientStop Color="#FFF7F3E9"/>
    </RadialGradientBrush>

    <Style TargetType="DataGrid">
        <Setter Property="ColumnHeaderStyle" Value="{DynamicResource DGCHeaderStyle}"/>
        <Setter Property="Background" Value="{x:Null}" />
        <Setter Property="HorizontalGridLinesBrush" Value="Black"/>
        <Setter Property="VerticalGridLinesBrush" Value="Black"/>
        <Setter Property="RowBackground" Value="{StaticResource DataGridRowBackground}"/>
        <Setter Property="AlternatingRowBackground" Value="{StaticResource DataGridAlternatingRowBackground}" />
    </Style>

    <!--Settin window style-->
    <Style TargetType="Window">
        <Setter Property="BorderBrush" Value="{StaticResource WindowBorderBrush}"/>
        <Setter Property="Background" Value="{StaticResource WindowBackgroungImage}"/>
    </Style>

</Application.Resources>

DataGrid的样式在设计器中应用时也适用于我开始调试时 背景图像根据需要出现在visual studio的设计器中,但在调试模式下启动应用程序时,它不会显示在任何窗口中。

当我在&#39; mainwindow.xaml&#39;中添加以下行时文件背景图像显示为所需

<Window.Background>
    <ImageBrush  ImageSource="Icons\clinic.jpg"/>
</Window.Background>

我的项目中有一个图标文件夹,其背景图片的名称为clinic.jpg

1 个答案:

答案 0 :(得分:4)

这不是您的ImageBrush的问题,而是您不能使用基本类型Window在默认情况下设置任何属性。原因是您的窗口类型为MainWindow,而非Window。因此它不起作用。如果您提供窗口类型,则可以为该窗口设置它。

<Application.Resources>
    <Style TargetType="{x:Type local:MainWindow}">
        <Setter Property="BorderBrush" Value="{StaticResource WindowBorderBrush}"/>
    <Setter Property="Background" Value="{StaticResource WindowBackgroungImage}"/>
    </Style>
</Application.Resources>

所以基本上你必须为所有窗口类型定义样式。您可以定义一种样式,只需使用BasedOn

创建其他样式即可
    <Style TargetType="Window">
        <Setter Property="BorderBrush" Value="{StaticResource WindowBorderBrush}"/>
        <Setter Property="Background" Value="{StaticResource WindowBackgroungImage}"/>
    </Style>

    <Style TargetType="{x:Type local:MainWindow}"
               BasedOn="{StaticResource {x:Type Window}}"/>