Использование StackPanel в качестве ContentControl (WPF) - PullRequest
5 голосов
/ 01 июня 2009

Итак, у меня есть StackPanel, которую я использую в качестве ContentControl. У меня есть место, где я хочу, чтобы кнопки генерировались на основе данных, к которым я привязан, и все это работает хорошо, но я хочу, чтобы кнопки были расположены горизонтально, а не вертикально, как это происходит в настоящее время. Вот скриншот:

alt text

А вот код из моего описания ContentTemplate:

<StackPanel Name="wpReleaseButtons" Orientation="Horizontal" Grid.Row="2">
    <ItemsControl IsTabStop="False" ItemsSource="{Binding Path=BranchCommands}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button Tag="{Binding}" Padding="3">
                     <TextBlock Text="{Binding Path=DisplayValue}" />
                </Button>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

Не уверен, что я здесь делаю не так. Любая информация будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

9 голосов
/ 01 июня 2009

Я бы сказал, что, похоже, ItemsControl - это то, что показывает кнопки по вертикали. если вы хотите, чтобы кнопки в ItemsControl были горизонтальными, то вам нужно, чтобы StackPanel был в ItemsControl ItemsPanelTemplate, а не наоборот, как в вашем коде:

<ItemsControl IsTabStop="False" ItemsSource="{Binding Path=BranchCommands}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Tag="{Binding}" Padding="3">
                <TextBlock Text="{Binding Path=DisplayValue}" />
            </Button>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

Возможно, я немного ошибаюсь с битом ItemsControl.ItemsPanel, поскольку у меня нет данных для его проверки ...

Редактировать: В дополнение к справке о Bea, есть некоторые хорошие вещи от Dr WPF .

3 голосов
/ 01 июня 2009

Я не вижу ваше изображение (оно заблокировано брандмауэром моей компании), но я все равно пойду ...

Ваш 'Orientation = "Horizontal" ", вероятно, работает должным образом: он содержит только один дочерний элемент, ItemsControl. Вместо этого попробуйте создать ControlTemplate для вашего ItemsControl, где ControlTemplate содержит StackPanel с Orientation = "Horizontal".

Надеюсь, это поможет!

Edit:

Еще раз, Bea приходит с ответом / примером!

http://bea.stollnitz.com/blog/?p=10

...