【问题标题】:Width of child control should match width of parent container子控件的宽度应与父容器的宽度匹配
【发布时间】:2011-01-07 06:41:16
【问题描述】:

我对 WPF 很陌生。我经常发现自己在努力让一堆子控件组合宽度以匹配给定的父容器。如下所示:

<ListBox x:Name="BrugereListBox" Grid.Column="0" Grid.Row="3" DataContext="{DynamicResource Brugere}" 
             ItemsSource="{Binding}" 
             PreviewMouseLeftButtonDown="BrugereListBox_MouseLeftButtonDown"
             PreviewMouseMove="BrugereListBox_PreviewMouseMove"
             >
        <ListBox.ItemTemplate  >
            <DataTemplate >
                <Border BorderBrush="Black" BorderThickness="1" Margin="2">
                    <StackPanel Orientation="Vertical" IsEnabled="True" 
                                PreviewMouseLeftButtonDown="StackPanel_PreviewMouseLeftButtonDown">
                        <StackPanel Orientation="Horizontal" >
                            <Label>Navn</Label>
                            <TextBox Text="{Binding Name}"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label>Password</Label>
                            <TextBox Text="{Binding Password}"></TextBox>
                        </StackPanel>
                        <StackPanel Orientation="Horizontal">
                            <Label>Email</Label>
                            <TextBox Text="{Binding Email}"></TextBox>
                        </StackPanel>
                    </StackPanel>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

在这种情况下,我有兴趣获取堆栈面板的子项的宽度:

<StackPanel Orientation="Horizontal" >
                        <Label>Navn</Label>
                        <TextBox Text="{Binding Name}"></TextBox>
                    </StackPanel>

匹配宽度

<ListBox x:Name="BrugereListBox"

对于这种情况有什么通用的解决方案吗?

【问题讨论】:

标签: wpf controls width parent


【解决方案1】:

使用正确的面板,你会没事的。 StackPanel 根据其方向及其子项自行决定其宽度/高度。使用Grid,它只会占用给定的空间 - 不多也不少。

【讨论】:

    【解决方案2】:

    原来是一个骗子:

    wpf border control to span the width of listboxItem

    以及那里给出的答案:

    这可能更多地与 ListBoxItems 本身不占用 ListBox 的整个宽度。添加 Horizo​​ntalContentAlignment="拉伸" 属性到您的 ListBox 并查看是否 它将单个项目扩展到 填充宽度。

    所以改成:

    <ListBox x:Name="BrugereListBox" Grid.Column="0" Grid.Row="3" DataContext="{DynamicResource Brugere}" 
                 ItemsSource="{Binding}" 
                 PreviewMouseLeftButtonDown="BrugereListBox_MouseLeftButtonDown"
                 PreviewMouseMove="BrugereListBox_PreviewMouseMove"
                 HorizontalContentAlignment="Stretch"
                 >
    

    但正如 Kent 所说,我认为使用 Grid 会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-11
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多