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

fsl*_*fsl 2 wpf controls parent width

我对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>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我有兴趣获得stackpanel的子节点的宽度:

<StackPanel Orientation="Horizontal" >
                        <Label>Navn</Label>
                        <TextBox Text="{Binding Name}"></TextBox>
                    </StackPanel>
Run Code Online (Sandbox Code Playgroud)

匹配的宽度

<ListBox x:Name="BrugereListBox"
Run Code Online (Sandbox Code Playgroud)

像这样的场景的任何通用解决方案?

Ken*_*art 5

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


Ala*_*tts 5

原来是一个骗子:

wpf边框控件跨越listboxItem的宽度

并给出了答案:

这可能更多地与ListBoxItems本身没有占用ListBox的整个宽度有关.将Horizo​​ntalContentAlignment ="Stretch"属性添加到ListBox,并查看它是否拉伸各个项目以填充宽度.

所以改为:

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

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