数据模板化ListBox不能水平拉伸 - 再次

时间:2013-12-07 22:37:55

标签: listbox datatemplate silverlight-5.0

无法使我的水平ListBox与'数据模板'完全拉伸。
我研究了这个主题,最流行的答案是将ItemContainer样式设置为:

 <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
                </Style>
 </ListBox.ItemContainerStyle>   

这对我来说似乎不起作用。

这是完全XAML代码。 ListBox.ItemsSource = ObservableCollection

<UserControl.Resources>
    <ResourceDictionary>


        <ItemsPanelTemplate x:Key="ItemsPanel">
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>

        <DataTemplate x:Key="ItemTemplate">
            <Button Margin="-2,-2,-4,-2"  >
                <StackPanel>
                    <TextBlock Text="{Binding}"
                               TextWrapping="Wrap"/>
                </StackPanel>
            </Button>
        </DataTemplate>

    </ResourceDictionary>

</UserControl.Resources>

 <ListBox VerticalAlignment="Top"  
                 Height="50"  
                 Background="Red"
                 ItemsPanel="{StaticResource ItemsPanel}" 
                 ItemTemplate="{StaticResource ItemTemplate}" 
                 ItemsSource="{Binding Headers}" >
            <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
                </Style>
            </ListBox.ItemContainerStyle>   
        </ListBox> 

1 个答案:

答案 0 :(得分:0)

不幸的是,如果您真的想要使用与ListBox(或实际上任何ItemsControl)的数据绑定,这很难做到。

原因是没有标准面板像StackPanel一样工作,但在布局方向上拉伸其元素。

我甚至不知道有任何第三方专家组这样做(这让我有时想知道工具包提供商到底是什么)。我有一个小标记,我下次需要时自己写一个,因为如果你已经熟悉开发面板,那么很容易做到。

如果不是,那么以编程方式创建网格可能会更好。

我假设您有可变数量的元素(否则您可以在xaml中定义每个元素,并且不需要ListBox)。

除了使用带有数据绑定的ListBox,您还可以以编程方式在Grid中创建ToggleButtons,同时将GridColumns设置为星号。

当然你也可以改变你的设计并让按钮左对齐。

我知道这很麻烦,但就是这样。