есть ли таблица данных для элементов панели сетки в WPF - PullRequest
5 голосов
/ 15 июля 2010

Совершенно новый для WPF ...

У меня есть набор данных, которые я хотел бы привязать к панели сетки. Каждый объект содержит строку и столбец сетки, а также материал для заполнения в сетке. Мне очень нравится, как я могу создавать шаблоны данных в списке XAML, чтобы создать пользовательский интерфейс, в котором практически ничего нет. Есть ли способ создать шаблон данных для элементов панели сетки и привязать панель к сбору данных?

Ответы [ 2 ]

14 голосов
/ 15 июля 2010

Вы можете использовать ItemsControl с Grid в качестве панели.Вот пример.XAML:

    <ItemsControl x:Name="myItems">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                </Grid>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding MyText}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.ItemContainerStyle>
            <Style>
                <Style.Setters>
                    <Setter Property="Grid.Row" Value="{Binding MyRow}" />
                    <Setter Property="Grid.Column" Value="{Binding MyColumn}" />
                </Style.Setters>
            </Style>
        </ItemsControl.ItemContainerStyle>
    </ItemsControl>

Кодовый код (для целей тестирования):

    public Window1()
    {
        InitializeComponent();
        myItems.ItemsSource = new[] {
            new {MyRow = 0, MyColumn = 0, MyText="top left"},
            new {MyRow = 1, MyColumn = 1, MyText="middle"},
            new {MyRow = 2, MyColumn = 2, MyText="bottom right"}
        };
    }
0 голосов
/ 15 июля 2010

Не уверен, поможет ли это вам, но почему бы не попробовать установить для ItemsPanel ItemsControl (ListBox, ListView) значение UniformGrid.Примерно так:

<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

Это похоже на предыдущее решение, только чуть более динамично.

...