WPF: Как нарисовать полигон, чтобы сохранить углы LineSegment при изменении размера - PullRequest
1 голос
/ 17 октября 2011

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

Glossy panel

Это XAML:

  <Window x:Class="Window1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="Window1" Height="200" Width="300">
      <StackPanel Orientation="Vertical">
          <StackPanel.Background>
              <DrawingBrush>
                  <DrawingBrush.Drawing>
                      <DrawingGroup>
                          <GeometryDrawing>
                              <GeometryDrawing.Geometry>
                                  <RectangleGeometry Rect="0,0,1,1"></RectangleGeometry>
                              </GeometryDrawing.Geometry>
                              <GeometryDrawing.Brush>
                                  <SolidColorBrush Opacity="0.5" Color="Blue" />
                              </GeometryDrawing.Brush>
                          </GeometryDrawing>
                          <GeometryDrawing>
                              <GeometryDrawing.Geometry>
                                  <PathGeometry>
                                      <PathGeometry.Figures>
                                          <PathFigureCollection>
                                              <PathFigure IsClosed="True" StartPoint="0,0">
                                                  <PathFigure.Segments>
                                                      <PathSegmentCollection>
                                                          <LineSegment Point="0.3,0" />
                                                          <LineSegment Point="0.2,1" />
                                                          <LineSegment Point="0,1" />
                                                          <LineSegment Point="0,0" />
                                                      </PathSegmentCollection>
                                                  </PathFigure.Segments>
                                              </PathFigure>
                                          </PathFigureCollection>
                                      </PathGeometry.Figures>
                                  </PathGeometry>
                              </GeometryDrawing.Geometry>
                              <GeometryDrawing.Brush>
                                  <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
                                      <GradientStop Offset="0.0" Color="Transparent" />
                                      <GradientStop Offset="0.7" Color="#58FFFFFF" />
                                      <GradientStop Offset="1.0" Color="#AFFFFFFF" />
                                  </LinearGradientBrush>
                              </GeometryDrawing.Brush>
                          </GeometryDrawing>
                      </DrawingGroup>
                  </DrawingBrush.Drawing>
              </DrawingBrush>
          </StackPanel.Background>
      </StackPanel>
  </Window>

Теперь, если я изменю размеры этого окна до половины высоты, блеск наклонится под другим углом, чем раньше:

Resized to half the height

Я понимаю, что приведенный выше код должен работать примерно так, и мой вопрос: как мне создать такой же эффект, чтобы угол сегмента полигона сохранялся при изменении размера? Желаемый конечный результат для изменения размера на половину высоты:

Desired resize to half the height: angle of the glint is preserved

1 Ответ

1 голос
/ 18 октября 2011

Я думаю,

    <DrawingBrush Stretch="UniformToFill">
        ...

должно сработать.

...