좋아, Windows Phone 7/Silverlight 프로그래밍에 익숙해 져서 상당히 직설적 인 프로세스라고 생각하는 것을 시작했습니다. , 불행히도 (잘하면!) 작은 문제가 발생했습니다.일반용, 재사용 가능한 Windows Phone 7 XAML 양식 만들기 및 클래스 라이브러리에서 사용하기
기본적으로 제 응용 프로그램 제품군의 모든 응용 프로그램에 표준 인 "About.xaml"양식과 같은 일반적인 XAML 양식을 만들려고합니다. 이 '정보'화면이 동일하게 보이고 호출 응용 프로그램에서 채워지는 몇 가지 필드 (예 : 응용 프로그램 이름 등) 만 다를뿐입니다. 또한 공유되므로 새로운 기능/버그 수정/개선 기능으로 모든 앱 (즉, 재사용 등)에 도움이됩니다. 내 생각에이 XAML 폼은 다양한 응용 프로그램에서 참조 할 수있는 클래스 라이브러리에 '살아 있어야합니다.
문제점을 강조 표시하기 위해 두 가지 프로젝트로 샘플 솔루션을 만들었습니다.
첫째을, 나는 윈도우 폰 파노라마 응용 프로그램을 만듭니다 "WindowsPhonePanoramaApplication1"라고 불렀다. 다음으로, "WindowsPhoneClassLibrary1"이라고 부르는 Windows Phone 클래스 라이브러리를 만듭니다.
"WindowsPhoneClassLibrary1"에서 "Windows Phone Portrait Page"유형의 새 양식 클래스를 만들고 "About.xaml"이라고합니다.
문제를 재현하기 위해 파노라마의 첫 번째 페이지에있는 목록 상자의 "SelectionChanged"이벤트와 같은 이벤트를 선택했습니다. 이전 이벤트는 "NavigationService.Navigate (...))
뒤에 코드에서<!--Panorama item one-->
<controls:PanoramaItem Header="first item">
<!--Double line list with text wrapping-->
<ListBox Margin="0,0,-12,0" ItemsSource="{Binding Items}" SelectionChanged="ListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</controls:PanoramaItem>
, 내가 가지고있는 인 selectionchanged 이벤트에 다음 코드를
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
NavigationService.Navigate(new Uri("/AboutPage.xaml", UriKind.RelativeOrAbsolute));
}
내가 응용 프로그램을 실행하고 목록 상자에있는 항목 중 하나를 클릭, 메서드 RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
이 호출되고 응용 프로그램이 th에서 중단됩니다. 전자 Debugger.Break()
라인 : 거기에 Exception
객체에서 찾고 NavigationFailedEventArgs
매개 변수에
는, 다음과 같은 오류가 표시됩니다 :
{"No XAML was found at the location '/AboutPage.xaml'."}
[System.InvalidOperationException]: {"No XAML was found at the location '/AboutPage.xaml'."}
_data: null
_HResult: -2146233079
_innerException: null
_message: "No XAML was found at the location '/AboutPage.xaml'."
_methodDescs: {System.IntPtr[16]}
_optionalData: null
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146233079
InnerException: Could not evaluate expression
Message: "No XAML was found at the location '/AboutPage.xaml'."
StackTrace: " at System.Windows.Navigation.PageResourceContentLoader.EndLoad(IAsyncResult asyncResult)\r\n at System.Windows.Navigation.NavigationService.ContentLoader_BeginLoad_Callback(IAsyncResult result)\r\n at System.Windows.Navigation.PageResourceContentLoader.BeginLoad_OnUIThread(AsyncCallback userCallback, PageResourceContentLoaderAsyncResult result)\r\n at System.Windows.Navigation.PageResourceContentLoader.<>c__DisplayClass4.<BeginLoad>b__0(Object args)\r\n at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)\r\n at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)\r\n at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)\r\n at System.Del
egate.DynamicInvokeOne(Object[] args)\r\n at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)\r\n at System.Delegate.DynamicInvoke(Object[] args)\r\n at System.Windows.Threading.DispatcherOperation.Invoke()\r\n at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)\r\n at System.Windows.Threading.Dispatcher.OnInvoke(Object context)\r\n at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)\r\n at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)\r\n at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)\r\n"
가 나는이 오류의 원인 꽤 확신 "About.xaml"은 "WindowsPhoneClassLibrary1"클래스 라이브러리에 있으며 응용 프로그램이 실행되고있는 "WindowsPhonePanoramaApplication1"이 아니기 때문입니다.
"WindowsPhonePanoramaApplication1"에 대해 생성 된 XAP 파일을 검사했으며 그 안에 "WindowsPhoneClassLibrary1.dll"이라는 어셈블리가 있어야합니다. 또한 Jeff Prosise의 블로그 which highlights a way to navigate to a XAML form in an external assembly in Silverlight 4 (INavigationContentLoader
인터페이스 사용)에 대한 링크를 발견했지만 Windows Phone 7은 Silverlight 3을 기반으로하고 WP7 설명서를 검색하면 해당 인터페이스가 정의되어 있지 않습니다. URIMapping/URIMapper 클래스를 찾아 보았지만 클래스 라이브러리에서 NavigationService
모양을 찾을 수는 없습니다.
질문은 Windows Phone 7 용 Silverlight 3/Silverlight를 사용하여 "WindowsPhonePanoramaApplication1"의 "NavigationService"에서 "About.xaml"클래스 라이브러리 "WindowsPhoneClassLibrary1" 형태? 확실히 클래스 라이브러리에서 XAML 양식을 다시 사용할 수있는 방법이 있어야합니까?
또한 위의 방법이 일반적인 XAML 양식을 다시 사용하는 잘못된 방법 일 경우 올바른 방향으로 나를 가리키는 도움말/링크에 관심이 있습니다. 당신이 요약
:-) 구문을 알고있는 경우 사전에 어떤 도움
감사합니다, 그것은 훨씬
아차, 말씀하신한다, 나는 [2011년 1월] (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=49b9d0c5-6597-4313-를 사용하고 있습니다 912a-f0cca9c7d277 & displaylang = en) Windows Phone Developer Tools의 설치. –