WPF / Silverlight:每条边可以有不同的笔触颜色吗?

时间:2011-03-21 14:49:04

标签: wpf silverlight xaml stroke

假设我有一个具有特定笔触颜色的矩形。我可以定义某些边缘以获得不同的颜色吗?例如,假设我希望笔触的顶部和底部是一种颜色,但笔划的左侧和右侧是不同的颜色?

如果无法做到这一点,你知道一个好方法吗?

4 个答案:

答案 0 :(得分:2)

我最终通过在彼此的顶部有两个边框来做到这一点。我相应地调整了边框厚度。

答案 1 :(得分:1)

没有开箱即用。同样不幸的是,Rectangle和Border都是密封类,所以最好的办法是扩展Shape类,实现一个矩形并为每条边创建Brush依赖属性(默认为已经存在的Stroke Brush)。

编辑:或者您可以在XAML中对此进行模板化,只需使用一堆边框,并且每个边框仅显示1条边。

答案 2 :(得分:1)

除了已经说过的内容之外,不能使用as-is控件,但是你可以使用网格中的Path来获得相同的效果,具体取决于你想要的效果。

<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>

答案 3 :(得分:0)

您可以通过为边框使用更复杂的画笔来完成此操作:

<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>

这并不精彩,并且依赖于已知和修复的边界的大小。但是,使用其他一些画笔类型可能会有更好的效果。