объединить изображение и сплошной фон для формы WPF - PullRequest
7 голосов
/ 04 февраля 2009

У меня есть форма WPF, которую я создаю. Я хочу указать фоновое изображение для окна, что достаточно просто. Однако я также хочу указать цвет, чтобы область формы, не покрытая изображением, была белой. Я видел несколько примеров, которые показывают использование двух разных фоновых кистей, но когда я пытаюсь это сделать, VS.NET сообщает, что у меня не может быть нескольких кистей.

Это XAML, который я использую

<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>

Это прекрасно работает для изображения, но фон, не покрытый изображением, черный. Как мне сделать его белым? Изменение самого изображения на самом деле не вариант.

Ответы [ 3 ]

7 голосов
/ 05 февраля 2009

Попробуйте это (я удалил все, что не имеет прямого отношения к вопросу, чтобы сделать код более понятным):

<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>

В основном, установите фон окна в цвет фона позади изображения, затем поместите сетку в окно и дайте сетку фоновое изображение, поместите все внутри сетки, а не прямо в окно.

3 голосов
/ 29 октября 2015

как расширение Nirs ответа. Если вы хотите, чтобы поля содержали поля, но позволяли фоновому изображению заполнять все окно, вы также можете размещать фоны с помощью границ:

<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>
1 голос
/ 04 февраля 2009

Я не уверен, что вы можете комбинировать кисти. Вы можете поиграть с ImageBrush, или вы можете забыть «фон» и сложить элементы друг над другом в сетке:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...