首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ListBoxItem HorizontalContentAlignment=Stretch不工作

ListBoxItem HorizontalContentAlignment=Stretch不工作
EN

Stack Overflow用户
提问于 2012-03-18 15:54:21
回答 1查看 4.1K关注 0票数 1

我很难让我的列表盒项目延伸到整个列表框的宽度。

下面是我的列表框的xaml

代码语言:javascript
运行
复制
<ListBox x:Name="MyListBox"
                 VerticalAlignment="Stretch"
                 HorizontalAlignment="Stretch"
                 HorizontalContentAlignment = "Stretch"
                 Margin="0,10,0,0"
                 ItemsSource="{Binding Path=Users}"
                 ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                 Grid.Column="0"
                 Grid.ColumnSpan="1"
                 Grid.Row="1"
                 Grid.RowSpan="3">                      
        <ListBox.ItemTemplate>
            <DataTemplate>
                <local:MyListBoxTemplate/>
            </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

我曾尝试过在其他帖子中找到以下建议,但这些建议对我来说并不管用:

Stretch

  • Overwriting

  • 将listbox的HorizontalContentAlignment设置为listboxitem的样式,即在列表框xaml中的ItemContainerStyle标记中的新样式(注意:我正在使用环球导航theme)

  • Editting,CoreStyles.xaml中的DefaultListBoxItemStyle样式来包含HorizontalContentAlignmemt

是因为我使用了一个单独的xaml文件作为数据模板吗?还是我的数据模板出了问题?有人对我还能尝试什么有什么建议吗?

我看到了某个地方,也许我可以将ListBoxItem宽度绑定到ListBox的实际宽度?

我对此非常陌生,所以如果我错过了一些非常简单/明显的东西,我会提前道歉!

以下是我的数据模板:

代码语言:javascript
运行
复制
<Grid x:Name="LayoutRoot" HorizontalAlignment="Stretch" ShowGridLines="True" Height="20">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="10*" />
        <ColumnDefinition Width="30*" />
        <ColumnDefinition Width="300*" />
        <ColumnDefinition Width="50*" />
        <ColumnDefinition Width="10*" />
    </Grid.ColumnDefinitions>
    <Image x:Name="TwitterImageIcon"
           Grid.Column="1" 
           Grid.ColumnSpan="1" 
           Source="{Binding Path=imageUrl}"
          />
    <StackPanel Orientation="Horizontal" Grid.Column="2" Grid.ColumnSpan="1" HorizontalAlignment="Stretch" >

        <TextBlock x:Name="TwitterUsernameTextBlock"
                   Text="{Binding Path=username,StringFormat='@\{0\}  '}"/>
        <TextBlock x:Name="TwitterFullNameTextBlock"
               Text="{Binding Path=fullname}"/>
    </StackPanel>


        <Button x:Name="InfoButton"
            Content="Info" 
            Grid.Column="3" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch"/>
        <Border x:Name="StyleBorder" />
    </Grid>

任何建议都非常感谢。

提前谢谢。

更新:当添加:

代码语言:javascript
运行
复制
    <ListBox...>
        <ListBox.Resources>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.Resources>
    </ListBox>

然而,它的工作影响到国际大都市主题,因此,当列表框项目悬停时和被选中时,列表框的高亮度与国际大都市主题的其他部分不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-18 17:03:29

试试这个,在你的列表箱里:

代码语言:javascript
运行
复制
<ListBox...>
    <ListBox.Resources>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.Resources>
</ListBox>

EDIT1 (对不起我的英语不好)

ListBoxItem上查找CoreStyles.xaml样式(查找x:Key="DefaultListBoxItemStyle")。在该样式中,找到名为ContentControl的x:Name="contentControl"并添加HorizontalContentAlignment属性,更改后代码将如下所示:

代码语言:javascript
运行
复制
<ContentControl x:Name="contentControl" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" >
    <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" VerticalAlignment="Center"  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="7"/>
</ContentControl>

现在您可以删除我在第一个答案中显示的Listbox.Resources .如果您不希望将此行为应用于所有的listBoxes,则可以复制此样式并给它一个不同的键。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9759724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档