![](/img/trans.png)
[英]Can I get access from code behind (of a ResourceDictionary) to a named control?
[英]With a NavigationView control, how can I navigate from the code behind?
是否可以從 NavigationView 中的代碼隱藏導航? 如果我是 NavigationView 框架中的一頁,並且我想離開該頁面並顯示另一個有效頁面,這是否可能。 我的項目不是 MVVM 結構。 我感謝您的幫助。
這是我的導航視圖:
<NavigationView x:Name="MasterNavigation"
Header="Main"
ItemInvoked="MasterNavigation_ItemInvoked"
PaneTitle="Menu"
IsBackButtonVisible="Collapsed"
IsSettingsVisible="False"
PaneDisplayMode="Auto"
OpenPaneLength="200"
IsTabStop="True">
<NavigationView.MenuItems>
<NavigationViewItem Icon="Home" Content="Home" Tag="home" IsSelected="True"/>
<NavigationViewItem Icon="Globe" Content="Data Collection" Tag="datacollection"/>
<NavigationViewItem Icon="Globe" Content="Data Collection (v2)" Tag="collectdata"/>
<NavigationViewItem Icon="Document" Content="Goals" Tag="goals"/>
<NavigationViewItem Icon="Manage" Content="Approvals" Tag="approvals"/>
<NavigationViewItem Icon="Print" Content="Reports" Tag="reports"/>
<NavigationViewItem Icon="Admin" Content="Admin" Tag="admin"/>
<NavigationViewItem Icon="PostUpdate" Content="Metric Staging" Tag="metricstaging"/>
<NavigationViewItem Icon="PostUpdate" Content="Ref Metric Main" Tag="refmetricmain"/>
<!--<NavigationViewItem Icon="Calculator" Content="Dashboard" Tag="dashboard" />-->
</NavigationView.MenuItems>
<Frame x:Name="MasterContentFrame" Margin="0,0,0,0"/>
</NavigationView>
這是我用來通過 UI 導航的代碼:
private void MasterNavigation_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
{
if (args.IsSettingsInvoked)
{
MasterContentFrame.Navigate(typeof(pageSettings));
}
else
{
// find NavigationViewItem with Content that equals InvokedItem
NavigationViewItem item = sender.MenuItems.OfType<NavigationViewItem>().First(x => (string)x.Content == (string)args.InvokedItem);
NavView_Navigate(item);
}
}
private void NavView_Navigate(NavigationViewItem item)
{
switch (item.Tag)
{
case "home":
MasterContentFrame.Navigate(typeof(pageHome));
MasterNavigation.Header = item.Content;
break;
case "datacollection":
MasterContentFrame.Navigate(typeof(pageDataCollection));
MasterNavigation.Header = item.Content;
break;
case "collectdata":
MasterContentFrame.Navigate(typeof(PageCollectMetricData));
MasterNavigation.Header = item.Content;
break;
case "goals":
MasterContentFrame.Navigate(typeof(pageGoals));
MasterNavigation.Header = item.Content;
break;
case "approvals":
MasterContentFrame.Navigate(typeof(pageComments));
MasterNavigation.Header = item.Content;
break;
case "reports":
MasterContentFrame.Navigate(typeof(pageReports));
MasterNavigation.Header = item.Content;
break;
case "admin":
MasterContentFrame.Navigate(typeof(pageAdmin));
MasterNavigation.Header = item.Content;
break;
case "metricstaging":
MasterContentFrame.Navigate(typeof(pageMetricStaging));
MasterNavigation.Header = item.Content;
break;
case "refmetricmain":
MasterContentFrame.Navigate(typeof(pageRefMetricMain));
MasterNavigation.Header = item.Content;
break;
}
}
我在“Metric Staging”頁面上有一個按鈕,如果單擊該按鈕,我希望它在 MasterContentFrame 中打開“Data Collection”頁面。
這是按鈕事件代碼,當在“Metric Staging”頁面上單擊按鈕時觸發:
private void ButtonListViewEdit_Click(object sender, RoutedEventArgs e)
{
Debug.WriteLine($"PAGE METRIC STAGING: BUTTON WAS CLICKED");
// Below are my attempts to implement 'code-behind' navigation
//MetricReporting.MainWindow MasterContentFrame.Navigate(typeof(pageDataCollection));
//MasterNavigation.Header = "Data Collection";
//var navigation = (Application.Current as App).MasterNavigation;
}
您可以將 window 中Frame
元素的x:FieldModifier
屬性設置為internal
或public
,以便能夠從另一個 class 訪問該Frame
:
<Frame x:Name="MasterContentFrame" x:FieldModifier="internal" Margin="0,0,0,0"/>
同時更改 App.xaml.cs 中m_window
字段的App.xaml.cs
:
internal Window m_window;
然后,您可以從Page
中的事件處理程序訪問Frame
,如下所示:
private void ButtonListViewEdit_Click(object sender, RoutedEventArgs e)
{
MainWindow window = (App.Current as App)?.m_window as MainWindow;
if (window != null)
{
window.MasterContentFrame.Navigate(typeof(typeof(pageDataCollection)));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.