Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按钮应在ItemsControl.ItemTemplate中水平对齐_C#_Wpf - Fatal编程技术网

C# 按钮应在ItemsControl.ItemTemplate中水平对齐

C# 按钮应在ItemsControl.ItemTemplate中水平对齐,c#,wpf,C#,Wpf,我尝试遵循Rachel Lim关于“SingleWindow”应用程序的教程: . 到目前为止,一切正常,但: 按钮是垂直对齐的,我希望它们是水平的!我已经厌倦了以下几点: <DockPanel DataContext="{StaticResource ResourceKey=MainFrameViewModel}"> <Border DockPanel.Dock="Top" BorderBrush="Black" BorderThickness="2">

我尝试遵循Rachel Lim关于“SingleWindow”应用程序的教程: . 到目前为止,一切正常,但:

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

<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>

正如你所看到的,我把所有的东西从边界放到一个水平方向的StackPanel中,但它不起作用。我尝试了stackpanel的每个位置,但没有成功!按钮总是垂直的


非常感谢

ItemsControl内部使用另一个面板(默认情况下,它是垂直方向的
虚拟化StackPanel
)-您可以通过
ItemsControl.ItemPanel
属性更改此设置。这就是为什么
ItemsControl
周围的
StackPanel
不会影响按钮的对齐。您应该使用以下代码:

<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>

如果您想了解更多关于ItemsControl的信息,我建议您阅读WPF博士的一系列博文“ItemsControl:A到Z”:


如果您还有任何问题,请随时提问。

Hey feO2x,非常感谢您的快速回答、良好的解释和链接!你让我度过了美好的夜晚;)你的夜晚…:-)