0

有时我的 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>
4

1 回答 1

3

我不完全确定这是你想要的效果,但你可以尝试将它添加到你GridDataTemplate.

<Grid Width="{Binding Width, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBox}}}">

本质上,它是在尝试定位ListBox父对象,如果成功,将获取该Width属性,这将确保您ListBoxItems的所有宽度都相同(的宽度ListBox)。这在一个快速测试项目中对我有用。

如果您所追求的只是一个简单的从边缘到边缘的渐变ListBox,您应该能够通过设置ListBox背景样式并提供ListBoxItems透明背景来获得这种效果。我以为你只是想要ListBoxItems.

于 2013-11-03T21:25:07.547 回答