【问题标题】:Buttons should align horizontal in ItemsControl.ItemTemplate按钮应在 ItemsControl.ItemTemplate 中水平对齐
【发布时间】:2014-08-26 20:08:26
【问题描述】:

我尝试按照 Rachel Lim 关于“SingleWindow”应用程序的教程进行操作: Click for tutorial .到目前为止一切正常,但是:

按钮是垂直对齐的,我希望它们是水平的!我已经厌倦了以下内容:

<DockPanel DataContext="{StaticResource ResourceKey=MainFrameViewModel}">
    <Border DockPanel.Dock="Top" BorderBrush="Black" BorderThickness="2">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
            <ItemsControl ItemsSource="{Binding PageViewModels}" >
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button Content="{Binding Name}"
                            Command="{Binding DataContext.ChangePageCommand, RelativeSource={RelativeSource  AncestorType= DockPanel}}"
                            CommandParameter="{Binding }"
                            Width="200"
                            />

                </DataTemplate>
            </ItemsControl.ItemTemplate>

        </ItemsControl>
        </StackPanel>
    </Border>

如您所见,我将 Border 中的所有内容都放入了水平方向的 StackPanel 中,但它不起作用。我已经尝试了堆栈面板的每个位置,但都没有成功!按钮总是垂直的

提前非常感谢!

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    ItemsControl 在内部使用另一个面板(默认情况下它是一个垂直方向的VirtualizingStackPanel) - 您可以通过ItemsControl.ItemPanel 属性更改它。这就是为什么围绕ItemsControlStackPanel 不会影响按钮对齐的原因。您应该使用以下代码:

    <DockPanel DataContext="{StaticResource ResourceKey=MainFrameViewModel}">
        <Border DockPanel.Dock="Top" BorderBrush="Black" BorderThickness="2">
            <ItemsControl ItemsSource="{Binding PageViewModels}" >
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Button Content="{Binding Name}"
                                Command="{Binding DataContext.ChangePageCommand, RelativeSource={RelativeSource  AncestorType= DockPanel}}"
                                CommandParameter="{Binding }"
                                Width="200" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </Border>
    </DockPanel>
    

    如果您想了解有关 ItemsControls 的更多信息,我会推荐 WPF 博士的系列博文“ItemsControl:A 到 Z”:http://drwpf.com/blog/itemscontrol-a-to-z/

    如果您还有其他问题,请随时提出。

    【讨论】:

    • 嘿feO2x,非常感谢您的快速回答和良好的解释以及链接!你让我度过了一个美好的夜晚;)
    • 呃 - 你的夜晚... :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2012-08-31
    • 2014-07-27
    • 2016-02-20
    • 2014-04-20
    • 2020-10-08
    • 2020-12-20
    相关资源
    最近更新 更多