Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF/Silverlight:每个边是否可能有不同的笔划颜色?_Wpf_Silverlight_Xaml_Stroke - Fatal编程技术网

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>

这并不明智,而是取决于已知和固定的边界大小。但是,使用其他一些笔刷类型,可能会有其他更好的变体