Предотвращение деформации фона XAML Grid при изменении размера - PullRequest
3 голосов
/ 23 июня 2009

Я пишу кисть на XAML, которую я могу использовать для рисования фона Grid для создания баннера. Это выглядит так:

An example of the brush applied to the background of a Grid

Я хочу, чтобы кисть растягивалась с Grid, когда Window изменяет размер, но я не хочу, чтобы центральные углы деформировались.

The deformed background brush

Мне нужно только уметь рисовать фигуры на фоне Grid. Как я могу избежать деформации?

Код, который я написал, выглядит следующим образом:

<Window x:Class="WpfApplication.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="60" Width="300">
    <Window.Resources>
        <DrawingBrush x:Key="GridBackground">
            <DrawingBrush.Drawing>
                <DrawingGroup>
                    <DrawingGroup.Children>
                        <GeometryDrawing Geometry="M0,1 0,0 0.4,0 0.45,0.5 0.4,1Z" Brush="#FF6A00" />
                        <GeometryDrawing Geometry="M0.6,1 0.55,0.5 0.6,0 1,0 1,1Z" Brush="#FF0000" />
                    </DrawingGroup.Children>
                </DrawingGroup>
            </DrawingBrush.Drawing>
        </DrawingBrush>
    </Window.Resources>
    <Grid Background="{StaticResource GridBackground}">
        <TextBlock Foreground="White" VerticalAlignment="Center">Some text</TextBlock>
    </Grid>
</Window>

1 Ответ

0 голосов
/ 23 июня 2009

Я бы сделал две кисти, одну на якорь справа, а другую на левую. Примерно так:

<Grid>
     <GeometryXXX Geometry="M0,1 0,0 0.4,0 0.45,0.5 0.4,1Z" Width="300" HorizontalAlignment="Left" Brush="#FF6A00">
     <GeometryXXX Geometry="M0,1 0,0 0.4,0 0.45,0.5 0.4,1Z" Width="300" HorizontalAlignment="Right" Brush="#FF0000">
     <TextBlock Foreground="White" VerticalAlignment="Center">Some text</TextBlock>
</Grid>

У меня нет открытого компилятора, и я не помню имя объекта рисования Geometry.

Другой способ сделать это - создать преобразователь значений и сделать что-то вроде:

...
    <GeometryDrawing Geometry="{Binding Width, ValueConverter=LeftAngledThing}" Brush="#FF6A00" />
    <GeometryDrawing Geometry="{Binding Width, ValueConverter=LeftAngledThing}" Brush="#FF0000" />
...

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

...