2009-02-04 15 views
6

Tengo un formulario WPF que estoy creando. Quiero especificar una imagen de fondo para la ventana, que es bastante fácil. Sin embargo, también quiero especificar un color para que el área de la forma no cubierta por la imagen sea blanca. He visto algunos ejemplos que muestran el uso de dos pinceles de fondo diferentes, pero cuando pruebo que VS.NET me dice que no puedo tener varios pinceles.combinación de imagen y fondo de color sólido para un formulario WPF

Este es el XAML que estoy usando

<Window x:Class="Consent.Client.Shell" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:cal="http://www.codeplex.com/CompositeWPF" 
    Title="Shell" WindowStyle="None" WindowState="Maximized" FontSize="24"> 
    <Window.Background> 
     <ImageBrush AlignmentX="Left" AlignmentY="Top" Stretch="None" TileMode="None" ImageSource="logo_header2.png" /> 
    </Window.Background> 
    <ItemsControl Background="White" VerticalAlignment="Center" cal:RegionManager.RegionName="MainRegion" > 
    </ItemsControl> 
</Window> 

Esto funciona muy bien para la imagen, pero el fondo no cubierta por la imagen es negro. ¿Cómo lo hago blanco? Cambiar la imagen en sí no es realmente una opción.

Respuesta

6

probar este (He quitado todo lo que no están directamente relacionadas con la cuestión de hacer la código más claro):

<Window x:Class="Consent.Client.Shell" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Background="White"> 
    <Grid> 
     <Grid.Background> 
     <ImageBrush ImageSource="logo_header2.png" /> 
     </Grid.Background> 
     <ItemsControl> 
     </ItemsControl> 
    </Grid> 
</Window> 

Básicamente, poner el fondo de la ventana a la detrás del color de la imagen, que puso una rejilla en la ventana y dar la cuadrícula que la imagen de fondo, poner todo dentro de la red en lugar de directamente en la ventana .

1

No estoy seguro de que pueda combinar los pinceles. Se podía jugar con ImageBrush, o se puede olvidar el "fondo" y apilar los elementos en la parte superior de uno al otro en una cuadrícula:

<Window x:Class="Consent.Client.Shell" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:cal="http://www.codeplex.com/CompositeWPF" 
    Title="Shell" WindowStyle="None" WindowState="Maximized" FontSize="24"> 
    <Grid> 
     <Image Source="logo_header2.png" Stretch="None" VerticalAlignment="Top" /> 
     <ItemsControl Background="White" VerticalAlignment="Center" cal:RegionManager.RegionName="MainRegion" > 
     </ItemsControl> 
    </Grid> 
</Window> 
2

Como una extensión a Nirs answer. Si desea tener márgenes alrededor de su contenido, pero deje que la imagen de fondo pueda llenar toda la ventana, también puede apilar fondos usando bordes:

<Window x:Class="Consent.Client.Shell" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Background="White"> 

    <Border Padding="10"> 
     <Border.Background> 
      <ImageBrush ImageSource="logo_header2.png" /> 
     </Border.Background> 
    <!--<Your content >--> 
    </Border> 

</Window> 
Cuestiones relacionadas