列表框中的 ListBoxItem 未完全拉伸到屏幕宽度

Posted

技术标签:

【中文标题】列表框中的 ListBoxItem 未完全拉伸到屏幕宽度【英文标题】:ListBoxItem inside a listbox not stretching completly to screen width 【发布时间】:2017-02-14 21:48:00 【问题描述】:
 <Grid Name="FavouriteStations" Visibility="Visible" >
    <ListBox  Name="FavouriteStationsListBox"   ItemsSource="Binding" Loaded="FavouriteStationsListBoxLoaded"  >
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            </Style>
        </ListBox.ItemContainerStyle>

        <ListBox.ItemTemplate>
            <DataTemplate>
                <local:StationTemplateSelector Content="Binding">
                    <local:StationTemplateSelector.St>
                        <DataTemplate>
                            <Grid  MinHeight="150" MinWidth="480" Background="#242224"  >

                            </Grid>
                        </DataTemplate>
                    </local:StationTemplateSelector.St>
                    <local:StationTemplateSelector.Ad>
                        <DataTemplate>
                            <Grid  MinHeight="150" MinWidth="480" Background="#FFFFFF"  >

                            </Grid>
                        </DataTemplate>
                    </local:StationTemplateSelector.Ad>
                </local:StationTemplateSelector>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

我有一个带有多个数据模板的listbox。纵向方向很好,但是当我将其更改为横向时,listboxitem 高度自动设置为MinHeight,宽度自动设置为MinWidth,但我想要宽度与屏幕宽度相同我尝试了以下

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

但是ListBoxItem 具有相同的宽度和高度,我看到的唯一区别是它与屏幕中心对齐。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

好的,我找到了解决方案。该问题是由DataTemplateSelector 引起的,您必须在&lt;phone:PhoneApplicationPage.Resources&gt; 部分中为您正在使用的DataTemplateSelector(StationTemplateSelector) 设置Template 值才能使其正常工作。

<phone:PhoneApplicationPage.Resources>
<Style TargetType="local:StationTemplateSelector">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="local:StationTemplateSelector">
                        <ContentPresenter ContentTemplate="TemplateBinding ContentTemplate" Content="TemplateBinding Content" Margin="TemplateBinding Padding" VerticalAlignment="TemplateBinding VerticalContentAlignment"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="VerticalAlignment" Value="Stretch"/>
</Style>

还需要在ListBox 控件中设置ItemContainerStyle

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

【讨论】:

以上是关于列表框中的 ListBoxItem 未完全拉伸到屏幕宽度的主要内容,如果未能解决你的问题,请参考以下文章

列表框中的自我工具提示

使用 ListBox 本身内部的“添加”按钮添加 ListBoxItem

在c#中删除listBoxItem时ListBox不刷新

WPF:删除样式列表框中焦点项目周围的虚线边框

列表框中的Silverlight文本块未包装

在加载时动画ListBoxItem