問(wèn)題描述
我剛剛開(kāi)始掌握來(lái)自 ASP.NET 和 Flex 的 silverlight 3.
Im just starting to get to grips with silverlight 3, coming from ASP.NET and Flex.
我已經(jīng)按照這里的新導(dǎo)航教程閱讀了身份驗(yàn)證和角色管理教程.
I have followed the new navigation tutorial here and read through the authentication and role management tutorials also.
所以,我有一個(gè)主頁(yè),它有一個(gè)框架、網(wǎng)格內(nèi)部和幾個(gè)視圖.這些都是可導(dǎo)航的并且工作正常.我認(rèn)為這個(gè)主頁(yè)是我的小應(yīng)用程序的母版頁(yè).
So, i have a main page, which has a frame, inside of the grid, and several views. These are all navigatable and working fine. I see this main page as kind of a master page to my little application i have i mind.
所以知道我想要一個(gè) login.xaml 用戶(hù)控件.這將處理所有登錄,一旦通過(guò)身份驗(yàn)證,我想導(dǎo)航到 MainPage,并使用它的框架從那里開(kāi)始.
So know I want to have a login.xaml UserControl. This will handle all login and once authenticated I want to navigate to the MainPage, and the use its frame to go from there.
我不只是想簡(jiǎn)單地在我的框架中使用登錄作為一個(gè)單獨(dú)的頁(yè)面,因?yàn)槲蚁M卿浭褂门c應(yīng)用程序的其余部分不同的網(wǎng)格,并且也是獨(dú)立的.
I dont just want to simply use login as a seprate page within my frame as I want the login to use a different grid to the rest of the app, and also to be separate.
那么我將如何從一個(gè)用戶(hù)控件(登錄)導(dǎo)航到另一個(gè)(主)?
So how would I navigate from one user control (Login) to another (Main) ?
我試過(guò)了
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
//TO - DO: All the auth work, just want navigation sorted first
this.Visibility = Visibility.Collapsed;
App.Current.RootVisual = new MainPage();
}
沒(méi)有運(yùn)氣.我也嘗試過(guò)初始化一個(gè)新的 main 并設(shè)置它的可見(jiàn)性,但這當(dāng)然不起作用.
With no luck. Ive also tried just init'n a new main and setting its Visibility but this of course doesnt work.
我是否以正確的方式處理這個(gè)問(wèn)題?
Am I even approaching this in the correct way?
非常感謝.
編輯 - 進(jìn)一步挖掘之后,這個(gè) 看起來(lái)像是一種可以做我所追求的方法,但它確實(shí)感覺(jué)有點(diǎn)駭人聽(tīng)聞!這是 silverlight 3 的建議方式嗎?再次感謝
Edit - Ok after digging a little further, this looks like an approach that will do what im after, but it does feel a little hackish! Is this the suggested way for siverlight 3? Thanks Again
推薦答案
我通常做的是創(chuàng)建一個(gè) System.Windows.Controls.Navigation 類(lèi)型的MainPage.xaml".這被分配給我的應(yīng)用程序的 RootVisual 屬性;它幾乎是空的,除了一個(gè)導(dǎo)航框架:
What I've usually done is to create a "MainPage.xaml" which is of type System.Windows.Controls.Navigation. That gets assigned to the RootVisual property of my application; it's pretty much empty, except for a navigation frame:
<navigation:Page
x:Class="Client.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignWidth="400"
d:DesignHeight="400" MinWidth="700" MinHeight="480"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Title="Main SlideLinc Page">
<Grid x:Name="LayoutRoot">
<navigation:Frame x:Name="rootFrame" />
</Grid>
</navigation:Page>
然后我使用rootFrame"導(dǎo)航框架來(lái)處理我所有的導(dǎo)航需求,例如,使用來(lái)自靜態(tài) NavigationManager 類(lèi)的這些方法:
Then I use the "rootFrame" navigation frame to handle all my navigation needs, e.g., with these methods from a static NavigationManager class:
public static void Navigate(string url, Action<Exception, UIElement> callback)
{
Navigate(new Uri(url, UriKind.RelativeOrAbsolute), callback);
}
public static void Navigate(Uri uri, Action<Exception, UIElement> callback)
{
if (rootFrame == null)
{
Logger.LogMessage("Can't use navigation, because rootFrame is null");
ErrorMessageBox.Show(ClientStrings.NavigationFailed);
}
else
{
NavigatedEventHandler successHandler = null;
NavigationFailedEventHandler failureHandler = null;
successHandler = (s, e) =>
{
rootFrame.Navigated -= successHandler;
rootFrame.NavigationFailed -= failureHandler;
if (callback != null)
{
callback(null, e.Content as UIElement);
}
};
failureHandler = (s, e) =>
{
rootFrame.Navigated -= successHandler;
rootFrame.NavigationFailed -= failureHandler;
if (callback != null)
{
callback(e.Exception, null);
}
};
rootFrame.Navigated += successHandler;
rootFrame.NavigationFailed += failureHandler;
rootFrame.Navigate(uri);
}
}
所以在你的情況下,你可以像這樣使用它:
So in your case, you might use it like:
NavigationManager.Navigate(new Uri("/Login.xaml", UriKind.Relative), null);
或者:
NavigationManager.Navigate(new Uri("/Home.xaml", UriKind.Relative), (error, element) => InitializeElement(element));
這篇關(guān)于Siliverlight 3 用戶(hù)控件之間的導(dǎo)航?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!