使用网格将菜单添加到窗口时,我是否将菜单设置为自己的行,还是使用某种面板?

时间:2016-03-27 18:07:29

标签: c# wpf xaml

我试图了解如何在我的WPF XAML窗口中添加Menu。我的窗口目前使用Grid进行内容布局。我想在窗口顶部添加Menu,类似于您在WinForm应用程序中通常看到的内容。

我查看了一些示例,但没有一个示例似乎解释了使用Grid。我看到大多数示例都使用StackPanelDockPanel等内容。

这是我当前的WindowGrid。我应该给这个Menu自己的行,还是需要某种面板?

<Window>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="1*" />
            <RowDefinition Height="3*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="3*" />
        </Grid.ColumnDefinitions>
        <Menu>
            <MenuItem Header="File" />
        </Menu>
        <GroupBox Header="Seasons" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2">
            <DataGrid Name="lstSeasons" AutoGenerateColumns="False" IsReadOnly="True" HeadersVisibility="Column" ItemsSource="{Binding SeasonsCollectionView}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}" />
                    <DataGridTextColumn Header="Division" Width="*" Binding="{Binding Division}" />
                </DataGrid.Columns>
            </DataGrid>
        </GroupBox>
    </Grid>
</Window>

2 个答案:

答案 0 :(得分:4)

您可以将Menu添加到主WPF布局Grid,如以下示例所示:

<Menu Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0">
    <MenuItem Header="_File"/>
    <MenuItem Header="_Edit"/>
    <MenuItem Header="_Help"/>
</Menu>

您无需任何其他容器控件即可完成此任务。此处显示了使用此Menu技术的实际WPF应用的屏幕截图(请注意应用窗口顶部的Menu栏):http://examn8.com

希望这可能会有所帮助。

答案 1 :(得分:1)

这是一个非常常见的实现,我看到它看起来效果很好:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Menu Grid.Row="0">
        <MenuItem Header="Load" IsEnabled="False"/>
        <MenuItem Header="Save" IsEnabled="True"/>
        <MenuItem Header="_Import/Export" IsEnabled="False">
            <MenuItem Header="_Import"/>
            <MenuItem Header="_Export"/>
        </MenuItem>
    </Menu>
    <TreeView Grid.Row="1" x:Name="tests" Width="auto">
    </TreeView>
</Grid>

如果有多列,则应在菜单上设置Grid.ColumnSpan属性。