Как установить абсолютную позицию WPF GeometryDrawing? - PullRequest
1 голос
/ 21 декабря 2010

Как мне установить абсолютную позицию GeometryDrawing?В настоящее время линия всегда проводится в центре.Я предполагаю, что LineGeometery всегда следует за выравниванием на контроле Изображения.

Вот некоторый (теперь отредактированный) код, с которым я работаю:

<Window x:Class="WpfProblem.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow"   >
<Grid Width="450" Height="160" Background="Beige" VerticalAlignment="Stretch">
    <Border BorderBrush="Lime" BorderThickness="1" CornerRadius="80" Background="#1AFF0000" Margin="0">
        <Image Width="420" Height="120" Stretch="None" >
            <Image.Source>
                <DrawingImage>
                    <DrawingImage.Drawing>
                        <GeometryDrawing>
                            <GeometryDrawing.Geometry>
                                <LineGeometry StartPoint="0,30" EndPoint="299,30"/>
                            </GeometryDrawing.Geometry>
                            <GeometryDrawing.Pen>
                                <Pen Thickness="5" Brush="Black"/>
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                    </DrawingImage.Drawing>
                </DrawingImage>
            </Image.Source>
        </Image>
    </Border>
</Grid>
</Window>

Ответы [ 3 ]

1 голос
/ 22 декабря 2010

Похоже, что вертикальное и горизонтальное выравнивание влияет на внутренний чертеж DrawImage.Таким образом, в зависимости от VerticalAlignment одна горизонтальная линия будет нарисована вверху, в центре или внизу конечного изображения.Сейчас я встраиваю чертеж в FrameworkElement с необходимым абсолютным позиционированием.

Исправлено в соответствии с комментарием Лиз.

1 голос
/ 22 декабря 2010

Я считаю, что ваша проблема (кроме приведенного выше кода, который не компилируется, поскольку Image.Source не имеет атрибутов Width и Height) не в том, что ваш GeometryDrawing центрирован, а в том, что ваш Canvas центрирован.

Чтобы доказать это, просто сделайте фон вашего красного холста красным:

<Canvas Width="350" Height="180" Background="Red">

Ваш GeometryDrawing находится в соответствующей позиции в этом центрированном холсте.

Geometry Drawing Example

Если вы хотите, чтобы Canvas умещался во все окно, не устанавливайте явные ширину и высоту, установите для параметра HorizontalAlignment и VerticalAlignment значение Stretch:

<Canvas HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        Background="Blue">

, чтобы получить:Stretch Canvas

0 голосов
/ 22 декабря 2010

Если вы измените Stretch = "None" на Stretch = "Fill" на своем изображении, оно будет использовать все пространство. Он не заполнит весь размер границы, потому что вы указали высоту и ширину.

Теперь, если вы используете GeometryGroup, вы можете указать столько типов линий, путей, сколько угодно. Затем он будет растянут, чтобы заполнить пространство вашего изображения.

<GeometryGroup>
    <LineGeometry StartPoint="0,0" EndPoint="410,0"/>
    <LineGeometry StartPoint="0, 100" EndPoint="410, 0"/>
</GeometryGroup>

Линии будут нарисованы, чтобы «соответствовать» вашему изображению. Что немного ближе к тому, что вы хотите, я думаю. Если оставить параметр Растянуть на None, объекты в центре изображения будут отображаться и не будут растягиваться при изменении размера изображения.

Похоже, что это две альтернативы использования ImageDrawing, либо по центру, либо для рисования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...