【问题标题】:WPF ListBoxItem does not stretch to the maximum widthWPF ListBoxItem 不会拉伸到最大宽度
【发布时间】:2013-09-16 11:03:23
【问题描述】:

我是 WPF 新手。我试图使 OrderItemsTmpl 模板中的第一列拉伸到可用的最大宽度,但它不起作用,宽度只能达到内部文本的宽度。我不想使用绝对值。如何解决这个问题?谢谢

<DataTemplate x:Key="OrderItemsTmpl">
            <Grid Background="Brown" HorizontalAlignment="Stretch" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="auto"></ColumnDefinition>
                </Grid.ColumnDefinitions>

                <StackPanel Grid.Column="0" HorizontalAlignment="Stretch">
                    <CheckBox Content="{Binding Path=sItemName}" HorizontalContentAlignment="Stretch" ></CheckBox>
                    <ListBox HorizontalContentAlignment="Stretch"
                        ItemsSource="{Binding Path=aSinglOptns}"
                        Margin="20,0,0,0"
                        ItemTemplate="{StaticResource SinglOptnTmpl}"
                        Style="{StaticResource SheetListStyle}"
                        ItemContainerStyle="{StaticResource ListBoxItemStyle}"
                 >

                    </ListBox>
                </StackPanel>

                <TextBlock Grid.Column="1" Text="{Binding Path=fQty}"></TextBlock>
</DataTemplate>

<Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <ContentPresenter></ContentPresenter>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>


<Style x:Key="SheetListStyle" TargetType="{x:Type ListBox}">
            <Setter Property="Background" Value="Aqua"></Setter>

            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListBox}">
                        <Border
                            CornerRadius="8"
                            BorderThickness="2">
                            <ScrollViewer>
                                <WrapPanel
                                    IsItemsHost="True"
                                    Orientation="Vertical"
                                    HorizontalAlignment="Left"/>
                            </ScrollViewer>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

包含项目的列表框

<Grid Background="Pink" Grid.Row="1" >
                        <Grid.RowDefinitions>
                            <RowDefinition Height="auto"></RowDefinition>
                            <RowDefinition Height="*"></RowDefinition>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>

                        <TextBlock HorizontalAlignment="Center" Text="{Binding Path=sDita}" Grid.Row="0" Grid.Column="0" TextWrapping="Wrap" ></TextBlock>

                        <ListBox
                                Grid.Row="1"
                                Grid.Column="0"
                                HorizontalContentAlignment="Stretch"
                                Background="Aqua"
                                ItemsSource="{Binding Path=aOrderItems}"
                                Name="OrderItems"
                                ItemTemplate="{StaticResource OrderItemsTmpl}"
                                Margin="0,0,0,0"
                                ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                                ScrollViewer.VerticalScrollBarVisibility="Auto"
                                ScrollViewer.CanContentScroll="True"
                                ItemContainerStyle="{StaticResource ListBoxItemStyle}"
                                Style="{StaticResource SheetListStyle}">

                        </ListBox>
                    </Grid>

更新 我意识到是因为&lt;Style x:Key="SheetListStyle"&gt; 我正在使用 WrapPanel,即使您应用 Horizo​​ntalAlignment="Stretch",它也不会拉伸到最大宽度 我必须改用其他面板,但有人知道可以使用什么吗?

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    在大多数集合控件上都有一个属性可以选择整行,我怀疑您可能需要设置它。如果您尚未将HorizontalContentAlignment 属性设置为Stretch,那么 就是您的问题。

    啊……我刚刚注意到你确实设置了这个属性。

    好的,让我们再试一次...我可以看到您在OrderItemsTmpl DataTemplate 中使用了StackPanel。这些控件对他们孩子的Width 没有任何影响,所以我认为是你的问题。请尝试将其更改为另一个 Grid 控件。

    【讨论】:

    • 您好,感谢您的帮助。我已将堆栈面板转换为网格,但它仍然无法拉伸到最大宽度。
    • 谢谢。 HorzontalContentAlignment="Stretch" 是解决我问题的答案。
    • 天哪!我不敢相信我没有首先想到这个。谢谢!
    【解决方案2】:

    请看here

    我确定这是重复的,但我找不到具有相同答案的问题。

    将 Horizo​​ntalContentAlignment="Stretch" 添加到您的列表框。这应该可以解决问题。

    【讨论】:

    • 这对我有帮助。谢谢!
    【解决方案3】:

    问题出在ListBox 的控件模板中。您正在使用 WrapPanel 并将其对齐到左侧。使用StackPanel 并允许其拉伸(默认):

                    <ControlTemplate TargetType="{x:Type ListBox}">
                        <Border
                            CornerRadius="8"
                            BorderThickness="2">
                            <ScrollViewer>
                                <StackPanel
                                    IsItemsHost="True"
                                    Orientation="Vertical" />
                            </ScrollViewer>
                        </Border>
                    </ControlTemplate>
    

    或者,您可以直接使用ItemsPresenter 控件而不是面板。 ListBox 默认使用 VirtualizingStackPanel,这也会为您提供虚拟化(您已禁用)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      相关资源
      最近更新 更多