有时我的ListBoxItem的内容比列表框宽,所以它被ListBox裁剪。这很好,但ListBoxItem的渐变背景没有拉伸到列表框宽度,而是拉伸到ListBoxItem内容的宽度。使用下面的代码,我试图强制渐变为ListBox的边缘到边缘。 ListBox具有动态宽度,因此我无法预定义ListBoxItem的宽度。我错过了什么?
<Style x:Key="MyListbox" TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
和
<DataTemplate DataType="{x:Type local:MyData}" >
<Grid HorizontalAlignment="Stretch" >
<Style TargetType="{x:Type Grid}">
...
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush>
<GradientStop Color="#ffffff" Offset="0"/>
<GradientStop Color="#000000" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
答案 0 :(得分:3)
我不完全确定这是你想要的效果,但你可以尝试将其添加到Grid
中的DataTemplate
。
<Grid Width="{Binding Width, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBox}}}">
基本上它正在尝试找到ListBox
父级,如果成功,将获取Width
属性,这将确保您的ListBoxItems
具有相同的宽度(ListBox
的宽度{1}})。这对我来说是一个快速测试项目。
如果您所追求的只是ListBox
本身边缘到边缘的简单渐变,您应该能够通过设置ListBox
背景样式并赋予{{1透明的背景。我假设你只想要ListBoxItems
上的渐变。