C# 如何自定义XAML导航视图窗格的外观
我有一个带有“顶部”窗格显示模式的XAML导航视图控件 我想增加窗格高度并将菜单项居中对齐 增加NavigationViewItem高度不会使窗格更高。更改对齐设置不会影响窗格中菜单项的位置 我该怎么做C# 如何自定义XAML导航视图窗格的外观,c#,xaml,uwp,C#,Xaml,Uwp,我有一个带有“顶部”窗格显示模式的XAML导航视图控件 我想增加窗格高度并将菜单项居中对齐 增加NavigationViewItem高度不会使窗格更高。更改对齐设置不会影响窗格中菜单项的位置 我该怎么做 <Page ... xmlns:muxc="using:Microsoft.UI.Xaml.Controls" ... > <Grid> <muxc:NavigationView x:Name="NavView"
<Page ... xmlns:muxc="using:Microsoft.UI.Xaml.Controls" ... >
<Grid>
<muxc:NavigationView x:Name="NavView"
Loaded="NavView_Loaded"
ItemInvoked="NavView_ItemInvoked"
BackRequested="NavView_BackRequested"
PaneDisplayMode="Top">
<muxc:NavigationView.MenuItems>
<muxc:NavigationViewItem Tag="home" Icon="Home" Content="Home"/>
<muxc:NavigationViewItemSeparator/>
<muxc:NavigationViewItemHeader x:Name="MainPagesHeader"
Content="Main pages"/>
<muxc:NavigationViewItem Tag="apps" Content="Apps">
<muxc:NavigationViewItem.Icon>
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph=""/>
</muxc:NavigationViewItem.Icon>
</muxc:NavigationViewItem>
<muxc:NavigationViewItem Tag="games" Content="Games">
<muxc:NavigationViewItem.Icon>
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph=""/>
</muxc:NavigationViewItem.Icon>
</muxc:NavigationViewItem>
<muxc:NavigationViewItem Tag="music" Icon="Audio" Content="Music"/>
</muxc:NavigationView.MenuItems>
<ScrollViewer>
<Frame x:Name="ContentFrame" Padding="12,0,12,24" IsTabStop="True"
NavigationFailed="ContentFrame_NavigationFailed"/>
</ScrollViewer>
</muxc:NavigationView>
</Grid>
</Page>
找不到答案,所以通过删除导航视图并实现类似的功能来解决问题,我自己在这里共享,以防其他人也遇到同样的问题。因此,这与其说是一个答案,不如说是一个解决办法。如果有人提供更好的答案,我会接受 在NavigationRoot.xaml中,我有一个网格,其中堆栈面板用于“窗格”,框架用于页面。注意,按钮有一个与我在导航中使用的页面标记相匹配的标记(不要判断) 这为您提供了基本的“导航视图”功能,实际上代码堆更少(但无法动态更改窗格布局)
为了简洁起见,我在这里省略的是,我必须设计切换按钮的样式,以便更适合此用途。而且,我让它们更像单选按钮,在任何时候只有一个被选中。也许单选按钮应该用于更多的样式设置(但我讨厌样式设置,所以选择了这条路线)?无法找到答案,因此通过删除导航视图并实现类似的功能来解决问题,在这里共享,以防其他人也遇到同样的问题。因此,这与其说是一个答案,不如说是一个解决办法。如果有人提供更好的答案,我会接受 在NavigationRoot.xaml中,我有一个网格,其中堆栈面板用于“窗格”,框架用于页面。注意,按钮有一个与我在导航中使用的页面标记相匹配的标记(不要判断) 这为您提供了基本的“导航视图”功能,实际上代码堆更少(但无法动态更改窗格布局)
为了简洁起见,我在这里省略的是,我必须设计切换按钮的样式,以便更适合此用途。而且,我让它们更像单选按钮,在任何时候只有一个被选中。也许单选按钮应该用于更多的样式化(但我讨厌样式化,所以就这样做了)?您可以先粘贴代码。我已经添加了XAML。问题实际上是关于如何定制NavigationView控件的外观,更具体地说是“窗格”部分。在文档中找不到任何内容。我遇到了类似的问题,并且很容易解决了,正如这里所解释的:您可以先粘贴代码。我添加了XAML。问题实际上是关于如何定制NavigationView控件的外观,更具体地说是“窗格”部分。在文档中找不到任何内容。我有类似的问题,并且很容易解决,如下所述:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="Pane" Orientation="Horizontal" HorizontalAlignment="Center" Margin="10">
<ToggleButton x:Name="HomeButton" Content="Home" Tag="home" Click="Button_Click" Width="100" Margin="10"/>
<ToggleButton x:Name="SettingsButton" Content="Settings" Tag="settings" Click="Button_Click" Width="100" Margin="10"/>
</StackPanel>
<Frame Grid.Row="1" x:Name="RootContentFrame"/>
</Grid>
private string CurrentPageTag;
// List of ValueTuple holding the Navigation Tag and the relative Navigation Page
private readonly List<(string Tag, Type Page)> _pages = new List<(string Tag, Type Page)>
{
("home", typeof(MainPage)),
("settings", typeof(SettingsPage))
};
string TargetPageTag = (sender as ToggleButton).Tag.ToString();
//cancel navigation of current and target are the same
if (TargetPageTag == CurrentPageTag)
{
return;
}
else
{
/*
you can check that page can be navigated away from here (form
validation and the like) and exit early if validation fails.
I actually use a global "cancel navigation" variable
that pages can set if they are in an incomplete state
and should not be navigated away from.
*/
//navigate to target page
Type targetPage = _pages.FirstOrDefault(p => p.Tag.Equals(targetPageTag)).Page;
RootContentFrame.Navigate(targetPage);
CurrentPageTag = targetPageTag;
return;
}