Горизонтальное растяжение сетки внутри StackPanel с вертикальной ориентацией - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь заставить Сетки в этой боковой панели заполнять боковую панель, которая является панелью стека.Согласно этому ответу это не может быть сделано.

Мой сценарий немного отличается, поскольку у меня фактически есть ListView с StackPanel в качестве ItemsContainer.

Я быстро выбилпример для демонстрации:

C #

public partial class MainWindow : Window
{
    public List<string> MyList { get; set; }

    public MainWindow()
    {
        InitializeComponent();

        this.MyList = new List<string> { "foo", "bar", "baz" };
        this.DataContext = this;
    }
}

XAML

    <ListView ItemsSource="{Binding MyList}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid  Background="Orange" 
                       HorizontalAlignment="Stretch">
                    <TextBlock Margin="5"                                    
                               Text="{Binding}"></TextBlock>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Background="Yellow"></StackPanel>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>

Результат выглядит так:

enter image description here

Какой лучший подход здесь?Я хочу, чтобы пункты меню связывались с динамическим списком и растягивались горизонтально.Я также хотел бы избежать жесткого кодирования ряда RowDefinitions в Grid вместо использования StackPanel.Возможно ли это?

Большое спасибо

1 Ответ

0 голосов
/ 22 февраля 2019

вам нужно установить HorizontalContentAlignment, чтобы растянуть его поведение по умолчанию - собрать все с левой стороны:

        <ListView ItemsSource="{Binding MyList}" HorizontalContentAlignment="Stretch">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid  Background="Orange">
                        <TextBlock Text="{Binding}"></TextBlock>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Background="Yellow"></StackPanel>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        </ListView>

enter image description here

Ps.рассмотрите возможность использования ObservableCollection вместо List<String> в случае, если вы планируете обновить эти элементы с помощью MVVM

...