WPF/Silverlight:每个边是否可能有不同的笔划颜色?
假设我有一个具有特定笔划颜色的矩形。我可以定义某些边具有不同的颜色吗?例如,假设我希望笔划的顶部和底部为一种颜色,但笔划的左侧和右侧为不同的颜色WPF/Silverlight:每个边是否可能有不同的笔划颜色?,wpf,silverlight,xaml,stroke,Wpf,Silverlight,Xaml,Stroke,假设我有一个具有特定笔划颜色的矩形。我可以定义某些边具有不同的颜色吗?例如,假设我希望笔划的顶部和底部为一种颜色,但笔划的左侧和右侧为不同的颜色 如果这是不可能的,你知道一个好方法吗?不是现成的。同样不幸的是,矩形和边框都是密封的类,所以最好的办法是扩展Shape类,实现一个矩形,并为每个边创建笔刷依赖属性(默认为已经存在的笔划笔刷) 编辑:或者,您可以在XAML中对此进行模板化,只需在每个边框上使用一组边框,并且每个边框只显示一条边。不是现成的。同样不幸的是,矩形和边框都是密封的类,所以最好的
如果这是不可能的,你知道一个好方法吗?不是现成的。同样不幸的是,矩形和边框都是密封的类,所以最好的办法是扩展Shape类,实现一个矩形,并为每个边创建笔刷依赖属性(默认为已经存在的笔划笔刷)
编辑:或者,您可以在XAML中对此进行模板化,只需在每个边框上使用一组边框,并且每个边框只显示一条边。不是现成的。同样不幸的是,矩形和边框都是密封的类,所以最好的办法是扩展Shape类,实现一个矩形,并为每个边创建笔刷依赖属性(默认为已经存在的笔划笔刷)
编辑:或者,您可以在XAML中对其进行模板化,只需在彼此的顶部使用一组边框,并且每个边框仅显示一条边。我最终通过两个边框(一个在彼此的顶部)来完成此操作。然后我相应地调整了边框的厚度。我最后用两个边框一个在另一个上面来完成这项工作。我也相应地调整了边框的厚度。除了已经说过的,这不能用原样控件来完成,但是你可以使用网格中的路径来获得同样的效果,这取决于你想要它做什么
<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>
除了已经说过的,这不能用原样控件来完成,但是您可以使用网格中的路径来获得相同的效果,这取决于您想要它做什么
<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>
您可以通过对边框使用更复杂的笔刷来完成此操作:
<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>
这并不明智,而是取决于已知和固定的边界大小。但是,使用其他一些笔刷类型,也有一些其他的变体可能会更好。您可以通过对边框使用更复杂的笔刷来实现这一点:
<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>
这并不明智,而是取决于已知和固定的边界大小。但是,使用其他一些笔刷类型,可能会有其他更好的变体