Как игнорировать преобразование для заливки объекта в форме (Silverlight)?

У меня есть прямоугольная форма в Silverlight, которая повернута на 15 градусов. Он наполнен изображением. Нормальным поведением SL является вращение объекта Fill вместе с его родителем (в данном случае прямоугольником).

Есть ли способ игнорировать эффект преобразования для объекта Fill? Я бы хотел, чтобы изображение продолжало указывать на север на экране.

Вот XAML, который у меня есть ниже. Я хотел бы узнать, есть ли свойство или другой способ не поворачивать ImageBrush (image2.png).

  <Rectangle x:Name="Rectangle_5_ID6" RenderTransformOrigin="0.5 0.5" Height="24" Width="78" Stroke="#000000" StrokeThickness="1" Canvas.Top="25" Canvas.Left="25">
    <Rectangle.RenderTransform>
      <TransformGroup>
        <RotateTransform Angle="15" />
      </TransformGroup>
    </Rectangle.RenderTransform>
    <Rectangle.Fill>
      <ImageBrush ImageSource="image2.png"  />
    </Rectangle.Fill>
  </Rectangle>

person Todd Main    schedule 29.12.2009    source источник


Ответы (1)


Существует несколько различных подходов, но я подозреваю, что тот, который лучше всего соответствует вашим потребностям, будет использовать вместо этого Path.

<Path x:Name="Rectangle_5_ID6" Stroke="Black" StrokeThickness="1" >
    <Path.Data>
        <RectangleGeometry Rect="0, 0, 78, 24" >
            <RectangleGeometry.Transform>
                <RotateTransform Angle="15" CenterX="39" CenterY="12" />
            </RectangleGeometry.Transform>
        </RectangleGeometry>
    </Path.Data>
    <Path.Fill>
        <ImageBrush ImageSource="image2.png" />
    </Path.Fill>
</Path>

Путь заканчивается прямоугольной областью, которая может вместить всю геометрию, содержащуюся в его данных, и заливку, нарисованную в этой области. Геометрия Rectangle рисуется с примененным преобразованием поворота, и только часть заливки, которая появляется внутри геометрии, фактически видна, остальное обрезается. Следовательно, вы получаете желаемый результат.

person AnthonyWJones    schedule 29.12.2009