Ширина дочернего элемента управления должна соответствовать ширине родительского контейнера. - PullRequest
2 голосов
/ 20 января 2010

Я довольно новичок в 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"

Любое общее решение для подобных сценариев?

Ответы [ 2 ]

5 голосов
/ 20 января 2010

оказывается обманом:

WPF пограничный элемент управления, чтобы охватить ширину listboxItem

и ответ, данный там:

Вероятно, это больше связано с ListBoxItems сами не берутся полная ширина ListBox. Добавить HorizontalContentAlignment = "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"
             >

но, как говорит Кент, по моему мнению, было бы лучше использовать Grid.

5 голосов
/ 20 января 2010

Используйте правую панель, и все будет в порядке. StackPanel сам принимает решение о его ширине / высоте в зависимости от его ориентации и дочерних элементов. Используйте Grid, и он просто займет место, которое ему дано - не больше, не меньше.

...