的与其他人已经建议的一样,OpacityMask
就是这样做的一种方式,但它有点具有挑战性,因为您无法在画笔上设置OpacityMask
。你只能在视觉上设置它 - OpacityMask
是在每个视觉基础上完成的。但ListBox
的Background
不是视觉树中的独立元素 - 它只是ListBox
的一个属性,它通常是模板绑定到类似Border
元素的某个位置。
这同样适用于某些人在这里提出的位图效果 - 这些也适用于整个视觉效果,而不适用于单个画笔。
但是,您可以使用VisualBrush
来处理这个问题 - 可以使用可视化树来定义画笔。因此,我认为这样做大概你在找什么:
<Setter Property="Background" TargetName="Bd">
<Setter.Value>
<VisualBrush>
<VisualBrush.Visual>
<Rectangle Width="1" Height="1">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0,0" StartPoint="1,0">
<GradientStop Offset="0" Color="Transparent"/>
<GradientStop Offset="0.05" Color="{x:Static SystemColors.HighlightColor}"/>
<GradientStop Offset="0.95" Color="{x:Static SystemColors.HighlightColor}"/>
<GradientStop Offset="1" Color="Transparent"/>
</LinearGradientBrush>
</Rectangle.Fill>
<Rectangle.OpacityMask>
<LinearGradientBrush EndPoint="0,0" StartPoint="0,1">
<GradientStop Offset="0" Color="Transparent"/>
<GradientStop Offset="0.05" Color="White"/>
<GradientStop Offset="0.95" Color="White"/>
<GradientStop Offset="1" Color="Transparent"/>
</LinearGradientBrush>
</Rectangle.OpacityMask>
</Rectangle>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
角落可能不是你要找相当的内容,但 - 取决于他们有多大最终被。当你使用这种技术时,他们看起来并不特别圆滑。所以你可以沿着效果路线走下去。你可能会喜欢这样的:
<Setter Property="Background" TargetName="Bd">
<Setter.Value>
<VisualBrush Viewbox="0.1,0.1,0.8,0.8">
<VisualBrush.Visual>
<Border Width="100" Height="100" CornerRadius="10"
Background="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}">
<Border.Effect>
<BlurEffect Radius="20"/>
</Border.Effect>
</Border>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
请注意,我用的Effect
而不是BitmapEffect
。与Effect
相比,您的选项更少,但它们通常是更好的选择,因为它们旨在以硬件呈现。
另一个渐变顶部的渐变怎么样? – Machinarius 2010-12-06 02:18:36
也许,但那么你将需要玩OpacityMask,它可能会变得非常难看... – 2010-12-06 08:45:05