Splitview 内容 属性 windows 通用
Splitview content property windows universal
我在我的应用程序中包含了 splitview。但是我不知道如何填充我的splitview的内容。我读到我应该把框架嵌在那里。所以我有我的 Mainpage.xaml,如果用户单击一个菜单按钮,splitview 的内容应该是例如 helpandabout.xaml。或者 我应该在内容 属性 中嵌套什么?以及如何用不同的页面替换内容。
如果用户按下一个按钮,我目前只是尝试更改网格的可见性,但这不是此控件背后的理念。
像这样:
<Grid x:Name="Grid1" Visibility="Visible"> </Grid>
<Grid Visibility="Collapsed" x:Name="Grid2"> </Grid>
然后用户在 splitview 窗格中按下按钮,代码执行此操作:
Grid1.Visibility = Visibility.Collapsed;
Grid2.Visibility = Visibility.Visible;
我知道那是一段愚蠢的代码。
实际上,您可以用 SplitView 和创建导航等替换完整的 App 标准
我所做的是:
1- 从这里学习导航示例:
uwp navigation example
2.- 了解它的工作原理后,它有一些技巧,例如命令栏位于应用栏之外等。您可以提取库中的所有代码。
AppShell.xaml, NavMenuItem, NavMenuListView.cs, PageHeader.xaml
3.- 创建以下扩展:
public class NavigationExtensions
{
public static void Initialize<T>(List<NavMenuItem> list, NavigationFailedEventHandler OnNavigationFailed, LaunchActivatedEventArgs e)
{
AppShell shell = Window.Current.Content as AppShell;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (shell == null)
{
// Create a AppShell to act as the navigation context and navigate to the first page
shell = new AppShell();
shell.NavigationList = list;
try
{
shell.CurrentItem = list.First(i => i.DestPage == typeof(T));
}
catch
{
}
// Set the default language
shell.Language = Windows.Globalization.ApplicationLanguages.Languages[0];
shell.AppFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
}
// Place our app shell in the current Window
Window.Current.Content = shell;
if (shell.AppFrame.Content == null)
{
// When the navigation stack isn't restored, navigate to the first page
// suppressing the initial entrance animation.
shell.AppFrame.Navigate(typeof(T), e.Arguments, new Windows.UI.Xaml.Media.Animation.SuppressNavigationTransitionInfo());
}
// Ensure the current window is active
Window.Current.Activate();
}
}
4.- 在您的项目和 App.xaml.cs add
中引用所有这些
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
NavigationExtensions.Initialize<PersonalView>(Navigation.GetNavigationMenuItems(),OnNavigationFailed,e);
}
方法所在的地方例如:
public class Navigation
{
public static List<NavMenuItem> GetNavigationMenuItems()
{
var list = new List<NavMenuItem>(
new[]
{
new NavMenuItem()
{
Symbol = Symbol.Contact,
Label = "Personal",
DestPage = typeof(PersonalView)
},
new NavMenuItem()
{
Symbol = Symbol.World,
Label = "Countries",
DestPage = typeof(CountriesView)
},
new NavMenuItem()
{
Symbol = Symbol.Setting,
Label = "Settings",
DestPage = typeof(SettingsView)
},
});
return list;
}
}
我在我的应用程序中包含了 splitview。但是我不知道如何填充我的splitview的内容。我读到我应该把框架嵌在那里。所以我有我的 Mainpage.xaml,如果用户单击一个菜单按钮,splitview 的内容应该是例如 helpandabout.xaml。或者 我应该在内容 属性 中嵌套什么?以及如何用不同的页面替换内容。 如果用户按下一个按钮,我目前只是尝试更改网格的可见性,但这不是此控件背后的理念。 像这样:
<Grid x:Name="Grid1" Visibility="Visible"> </Grid>
<Grid Visibility="Collapsed" x:Name="Grid2"> </Grid>
然后用户在 splitview 窗格中按下按钮,代码执行此操作:
Grid1.Visibility = Visibility.Collapsed;
Grid2.Visibility = Visibility.Visible;
我知道那是一段愚蠢的代码。
实际上,您可以用 SplitView 和创建导航等替换完整的 App 标准
我所做的是:
1- 从这里学习导航示例: uwp navigation example
2.- 了解它的工作原理后,它有一些技巧,例如命令栏位于应用栏之外等。您可以提取库中的所有代码。
AppShell.xaml, NavMenuItem, NavMenuListView.cs, PageHeader.xaml
3.- 创建以下扩展:
public class NavigationExtensions
{
public static void Initialize<T>(List<NavMenuItem> list, NavigationFailedEventHandler OnNavigationFailed, LaunchActivatedEventArgs e)
{
AppShell shell = Window.Current.Content as AppShell;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (shell == null)
{
// Create a AppShell to act as the navigation context and navigate to the first page
shell = new AppShell();
shell.NavigationList = list;
try
{
shell.CurrentItem = list.First(i => i.DestPage == typeof(T));
}
catch
{
}
// Set the default language
shell.Language = Windows.Globalization.ApplicationLanguages.Languages[0];
shell.AppFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
}
// Place our app shell in the current Window
Window.Current.Content = shell;
if (shell.AppFrame.Content == null)
{
// When the navigation stack isn't restored, navigate to the first page
// suppressing the initial entrance animation.
shell.AppFrame.Navigate(typeof(T), e.Arguments, new Windows.UI.Xaml.Media.Animation.SuppressNavigationTransitionInfo());
}
// Ensure the current window is active
Window.Current.Activate();
}
}
4.- 在您的项目和 App.xaml.cs add
中引用所有这些protected override void OnLaunched(LaunchActivatedEventArgs e)
{
NavigationExtensions.Initialize<PersonalView>(Navigation.GetNavigationMenuItems(),OnNavigationFailed,e);
}
方法所在的地方例如:
public class Navigation
{
public static List<NavMenuItem> GetNavigationMenuItems()
{
var list = new List<NavMenuItem>(
new[]
{
new NavMenuItem()
{
Symbol = Symbol.Contact,
Label = "Personal",
DestPage = typeof(PersonalView)
},
new NavMenuItem()
{
Symbol = Symbol.World,
Label = "Countries",
DestPage = typeof(CountriesView)
},
new NavMenuItem()
{
Symbol = Symbol.Setting,
Label = "Settings",
DestPage = typeof(SettingsView)
},
});
return list;
}
}