2009-01-20 63 views
17

我試圖爲我的wpf應用程序中的一個業務對象定義一個dataTemplate,它的一個集合被綁定到一個ListBox。wpf邊界控制跨越listboxItem的寬度

<UserControl.Resources> 
    <DataTemplate x:Key="ResizedItemsDataTemplate" DataType="{x:Type resizer:ResizeMonitorItem}"> 
       <Border x:Name="bdr" BorderBrush="Blue" 
            BorderThickness="1" 
            CornerRadius="2" 
            Width="auto" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch"> 
        <Grid Margin="2"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="14"></RowDefinition> 
          <RowDefinition Height="14"></RowDefinition> 
         </Grid.RowDefinitions> 


         <TextBlock Grid.Row="0" Text="{Binding SaveAsFileName}"></TextBlock> 
         <TextBlock Grid.Row="1" Text="{Binding ResizedImageFilePath}"></TextBlock> 
        </Grid> 
      </Border> 
    </DataTemplate> 
</UserControl.Resources> 
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0">  
    <Border BorderThickness="0,0,0,5" BorderBrush="DarkGray" > 
     <ListBox x:Name="ListBoxResizeItems" ItemsSource="{Binding Path=ResizeItems}" BorderThickness="0" ItemTemplate="{DynamicResource ResizedItemsDataTemplate}"> 
     </ListBox> 
    </Border> 
</Grid> 

我怎樣才能用X定義的邊界:名稱= BDR跨越每一個列表框項的全寬?目前它只能跨越其中的文本塊,而不需要填充listboxitem的全部寬度,並且對於每個listboxitem也是不同的。

回答

52

這可能與ListBoxItems本身不佔用ListBox的全部寬度有關。將HorizontalContentAlignment="Stretch"屬性添加到您的ListBox並查看它是否拉伸單個項目以填充寬度。

+0

尼斯。不知道那個屬性。太糟糕了,默認值是Left而不是Stretch,這導致了這種行爲。 – Gishu 2009-01-20 11:48:41

+0

真棒,我有完全相同的問題,這解決了它。 – vargonian 2010-11-01 23:37:22

1

解決了它。訣竅是在您的列表框上設置Horizo​​ntalContentAlignment =「Stretch」,以使其內容伸展整個寬度,而不是隻適合內容。

<ListBox x:Name="ListBoxResizeItems" 
       HorizontalContentAlignment="Stretch" 
       ItemsSource="{Binding Path=ResizeItems}" 
       BorderThickness="0"           
       ItemTemplate="{DynamicResource ResizedItemsDataTemplate}" > 
     </ListBox> 

對不起馬特,剛剛得到你的答案,因爲我正在打這篇文章。

1

Horizo​​ntalContentAlignment是一個不錯的,乾淨的解決方案,相比我想要的。謝謝!

這裏是幾乎工作,但有時做了一個對話框,動畫本身越走越寬永:

Width="{Binding ActualWidth, 
     RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"