WPF / Silverlight: возможно ли иметь разные цвета обводки для каждого края? - PullRequest
1 голос
/ 21 марта 2011

Скажем, у меня есть прямоугольник с определенным цветом обводки.Могу ли я определить определенные края, чтобы иметь разные цвета?Например, скажем, я хочу, чтобы верх и низ обводки были одного цвета, а левый и правый обводки - другого цвета?

Если это невозможно, знаете ли вы о хорошемспособ

Ответы [ 4 ]

2 голосов
/ 21 марта 2011

Я закончил тем, что сделал две границы одна на вершине друг друга.И я корректирую толщину границ соответственно.

1 голос
/ 21 марта 2011

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

<Grid Margin="5">
    <Path Stroke="Red" StrokeThickness="1">
        <Path.Data>
            <LineGeometry StartPoint="0 0" EndPoint="0 100"/>
        </Path.Data>
    </Path>
    <Path Stroke="Yellow" StrokeThickness="1">
        <Path.Data>
            <LineGeometry StartPoint="0 100" EndPoint="100 100"/>
        </Path.Data>
    </Path>
    <Path Stroke="Pink" StrokeThickness="1">
        <Path.Data>
            <LineGeometry StartPoint="100 100" EndPoint="100 0"/>
        </Path.Data>
    </Path>
    <Path Stroke="Green" StrokeThickness="1">
        <Path.Data>
            <LineGeometry StartPoint="100 0" EndPoint="0 0"/>
        </Path.Data>
    </Path>
</Grid>
1 голос
/ 21 марта 2011

Не из коробки.К сожалению, и Rectangle, и Border являются закрытыми классами, поэтому лучше всего расширить класс Shape, реализовать прямоугольник и создать свойства зависимости Brush для каждого ребра (по умолчанию это уже существующая Stroke Brush).

Редактировать: в качестве альтернативы вы можете шаблонировать это в XAML, просто используйте связку границ друг над другом и показывайте только одно ребро.

0 голосов
/ 21 марта 2011

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

<Border BorderThickness="2" Width="200" Height="100">
  <Border.BorderBrush>
    <LinearGradientBrush StartPoint="0,0" EndPoint="0.5,0" SpreadMethod="Reflect">
      <GradientStop Color="Blue" Offset="0" />
      <GradientStop Color="Blue" Offset="0.02" />
      <GradientStop Color="Red" Offset="0.02" />
    </LinearGradientBrush>
  </Border.BorderBrush>
</Border>

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

...