如何裁剪ListBoxItem内容并使其适合ListBox

时间:2013-11-03 19:40:39

标签: c# wpf

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

1 个答案:

答案 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上的渐变。