子控件的宽度应与父容器的宽度匹配

时间:2010-01-20 13:22:53

标签: wpf controls width parent

我对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的子节点的宽度:

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

匹配

的宽度
<ListBox x:Name="BrugereListBox"

这种情况的任何通用解决方案?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

原来是一个骗子:

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"
             >

但肯特说,在我看来,使用网格会更好。