Почему эта полилиния не помещается внутри ViewBox в WPF? - PullRequest
0 голосов
/ 31 января 2020

То, чего я пытаюсь достичь, это поместить Polyline внутрь Viewbox. Я пробовал опции Stretch, но, похоже, он не работает с отрицательными значениями. Может кто-нибудь подсказать, как вписать содержимое в ViewBox?

Ниже приведен мой пример кода:

<Viewbox Stretch="Uniform">
    <Grid>
        <Polyline Margin="10" Fill="Tan" HorizontalAlignment="Center" 
                  VerticalAlignment="Center" Points="0,0 14,0 14,-38" 
                  StrokeThickness="1" Stroke="Black" 
                  RenderTransformOrigin="0.5,0.5">
            <Polyline.RenderTransform>
                <TransformGroup>
                    <RotateTransform Angle="180"/>
                    <ScaleTransform>
                        <ScaleTransform.ScaleX>-1</ScaleTransform.ScaleX>
                    </ScaleTransform>
                </TransformGroup>
            </Polyline.RenderTransform>
        </Polyline>
    </Grid>    
</Viewbox>

Границы go за пределами Viewbox, следовательно, невозможно получить это, чтобы "соответствовать" виду.

1 Ответ

2 голосов
/ 31 января 2020

Вы не должны устанавливать RenderTransform элемента в Viewbox.

Вместо полилинии вы можете использовать Path с геометрией полилинии, где вы можете установить свойство Transform * 1004. * объект в контуре Data:

<Viewbox Stretch="Uniform">
    <Path Margin="10" Fill="Tan" StrokeThickness="1" Stroke="Black"
          HorizontalAlignment="Center" VerticalAlignment="Center">
        <Path.Data>
            <PathGeometry Figures="M0,0 L14,0 14,-38">
                <PathGeometry.Transform>
                    <TransformGroup>
                        <RotateTransform Angle="180"/>
                        <ScaleTransform>
                            <ScaleTransform.ScaleX>-1</ScaleTransform.ScaleX>
                        </ScaleTransform>
                    </TransformGroup>
                </PathGeometry.Transform>
            </PathGeometry>
        </Path.Data>
    </Path>
</Viewbox>

Редактировать: Альтернативой может быть установка LayoutTransform вместо RenderTransform. Вам также необходимо установить свойство Stretch для полилинии:

<Viewbox>
    <Polyline Margin="10" Fill="Tan" StrokeThickness="1" Stroke="Black"
              Points="0,0 14,0 14,-38" Stretch="Uniform">
        <Polyline.LayoutTransform>
            <TransformGroup>
                <RotateTransform Angle="180"/>
                <ScaleTransform>
                    <ScaleTransform.ScaleX>-1</ScaleTransform.ScaleX>
                </ScaleTransform>
            </TransformGroup>
        </Polyline.LayoutTransform>
    </Polyline>
</Viewbox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...