【问题标题】:Visual C#: Can't find correct relative width for listboxVisual C#:找不到正确的列表框相对宽度
【发布时间】:2016-11-24 13:24:21
【问题描述】:

所以我有一个列表框,我试图在里面使用一个堆栈面板作为一个带有边框的项目。现在我希望每个项目的宽度都与我的列表框相同,列表框固定在窗口的两侧。我找到了如何设置相对于父级的宽度,但由于某种原因它变得更宽。似乎无法弄清楚为什么。如下图所示的代码。

<ListBox x:Name="listBoxSecrets" Margin="10,107,10,10" Background="{x:Null}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Border BorderBrush="Orange" CornerRadius="2,2,2,2" BorderThickness="2,2,2,2">
                <StackPanel Background="White" 
                            Width="{Binding RelativeSource=
        {RelativeSource FindAncestor,
        AncestorType={x:Type ListBox}},
        Path=ActualWidth}"
                            >
                    <TextBlock Text="{Binding Path=Name}" />
                    <TextBlock Text="{Binding Path=Totp}" />
                </StackPanel>
            </Border>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

【问题讨论】:

  • 如果您删除 Width="{Binding RelativeSource= ... 会发生什么?项目应适合 ListBox 宽度
  • 我添加它是为了让它们更宽。如果我不这样做,它们只是内容的大小。也许是因为边界?
  • 我明白了。不,它不是 Border,它是 ListBox 属性。 &lt;ListBox HorizontalContentAlignment="Stretch" ... 应该改进它
  • @ASh 好的!那解决了它!谢啦! :)

标签: c# wpf xaml listbox stackpanel


【解决方案1】:

ListBox.ActualWidth 对于 ListBoxItems 来说太大了。但如果 ListBox 将 HorizontalContentAlignment 设置为 "Stretch",ListBoxItems 将使用所有可用宽度:

<ListBox HorizontalContentAlignment="Stretch" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 2012-04-08
    • 2020-03-25
    • 1970-01-01
    • 2022-11-22
    • 2017-06-08
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多