如何在WPF中精确设置左右边界渐变
我有一个如何在WPF中精确设置左右边界渐变,wpf,Wpf,我有一个边框,我正试图将它的边框笔刷设置为左边框渐变从#d3d3到BFBFBF,右边框渐变从#BFBFBF到#717171。问题是如果我这样做: <Setter Property="BorderBrush"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="1,0"> <GradientStop Offset="0" Color=
边框
,我正试图将它的边框笔刷
设置为左边框渐变从#d3d3
到BFBFBF
,右边框渐变从#BFBFBF
到#717171
。问题是如果我这样做:
<Setter Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Offset="0" Color="#D3D3D3"/>
<GradientStop Offset="0.1" Color="#BFBFBF"/>
<GradientStop Offset="0.9" Color="#BFBFBF"/>
<GradientStop Offset="1" Color="#717171"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
我需要正确选择偏移量,这很难。此外,我需要不同的边界大小不同的偏移。通常,如果我有BorderThickness=10,0,10,0
,我希望边框渐变在左侧部分为0-10像素的C1-C2颜色,在右侧部分为0-10像素的C2-C3颜色(或border.Width
-border.Width+10
像素)。我不关心上下边框,我可以把它们作为纯色
我能实现我所描述的目标吗
我希望边框看起来像这样(这张图片是我正在尝试做的面板的底部裁剪):
我知道您还有其他建议-请在WPF中共享,您不能在边界元素的不同侧面使用不同的渐变 您应该改为使用两个嵌套的
边框
元素,一个只包含左侧,另一个包含右侧边框:
<Border BorderThickness="2,0,0,0">
<Border.BorderBrush>
<!-- Left side gradient -->
</Border.BorderBrush>
<Border BorderThickness="0,0,2,0">
<Border.BorderBrush>
<!-- Right side gradient -->
</Border.BorderBrush>
<!-- Content here -->
</Border>
</Border>
您可能只需向控件添加一个“导体”,用于监视控件的更改(您可能可以为此使用附加的行为/属性)。它可以检查“边界厚度”属性,并在厚度更改时创建具有正确尺寸的渐变。您可以为该组件提供基色,它将使用该基色生成gradients@Charleh我可以这么做,但听起来很烦人。。。我试图模仿的这些面板都在旧的QT程序和晚Win 98设计中,我不能相信WPF不能以更简单的方式做到这一点。不管怎样,谢谢你的提示——如果我找不到更好的解决方案,我就不得不这样做。我觉得你的回答应该能让我达到我想要的结果,但我还是错过了一点。我可以通过
MappingMode=absolute
对左边框进行绝对定位,但如何对右边框进行绝对定位?我希望正确的渐变从元素宽度开始到(宽度+边框宽度)@Archeg。看来设置正确的边框毕竟不是那么容易。请参阅我的编辑。我会将此标记为答案,但由于解决方案的复杂性,我会避免使用它(因此我不会破坏我的xaml,因为我有许多这样的面板),除非我被要求严格遵循设计,因为客户还不确定是否允许我偏离。谢谢。@Archeg对于ContentControl
,您可以将其包装为ControlTemplate
。
<StackPanel Orientation="Horizontal">
<Rectangle Width="10">
<Rectangle.Fill>
<!-- Left side gradient -->
</Rectangle.Fill>
</Rectangle>
<!-- Content here -->
<Rectangle Width="10">
<Rectangle.Fill>
<!-- Right side gradient -->
</Rectangle.Fill>
</Rectangle>
</StackPanel>