2011-01-09 4 views
3

Windows Phone 7 애플리케이션을 만들고 있는데 어둡거나 밝은 테마와 약간 혼동 스럽습니다.WP7 프로젝트의 테마 인식 XAML 리소스

파노라마를 사용하면 매우 자주 배경 이미지를 설정할 수 있습니다. 문제는 어두운 주제와 밝은 주제 모두에 적합한 그림을 만드는 것이 매우 어렵다는 것입니다. 어떻게 진행해야합니까?

파노라마에 어둡거나 밝은 테마를 적용 할 수있는 방법이 있습니까? 이렇게하면 테마 별 파노라마 배경 사진이 생성되지 않습니다. 그렇다면 어떻게해야합니까? 에 xaml 파일이 있습니다. 계속 진행하는 것이 올바른 경우 내 파노라마 용으로 어떻게 가져올 수 있습니까?

어둡거나 밝은 주제를 강요하는 방법이 없거나 잘못된 경우 올바른 리소스를 설정하는 조건부 XAML을 작성하는 방법은 무엇입니까? 지금은 어두운 테마 괜찮 다음 XAML (default.xaml)이 있습니다

<ImageBrush x:Key="PageBackground" ImageSource="Resources/PageBackground.png" Stretch="None" /> 
<ImageBrush x:Key="PanoramaBackground" ImageSource="Resources/PanoramaBackground.png" Stretch="None" /> 

을하지만 가벼운 테마를 사용할 때 검은 컨트롤과 검은 색 텍스트 내 어두운 배경 사진과 함께 읽기 어렵다.

<ImageBrush x:Key="PageBackground" ImageSource="Resources/PageBackgroundLight.png" Stretch="None" /> 
<ImageBrush x:Key="PanoramaBackground" ImageSource="Resources/PanoramaBackgroundLight.png" Stretch="None" /> 

지금 내 문제는 현재 테마에 따라 옳은 일을 선언 할 XAML 조건부 만드는 것입니다 : 그래서 나는이 방법을 사용할 수있는 다른 그림을했다.

인터넷에서 관련있는 방법을 찾지 못했습니다. 나는 XAML이 이것을 할 수 있다고 믿기 때문에 코드 나 코드 숨김을 사용하지 않기를 바랄 것이다 (나는 단지 어떻게 해야할지 모르겠다).

편집 : 코드는 실제로 당신이 지적 폴더에 정의 된 스타일을 사용할 수있는 어둡거나 흰색 테마를 강제로 ResourceDictionary에

string xaml = null; 
StreamResourceInfo xamlInfo = Application.GetResourceStream(new Uri("light.xaml", UriKind.Relative)); 
using (StreamReader sr = new StreamReader(xamlInfo.Stream)) 
    xaml = sr.ReadToEnd(); 
dic = (ResourceDictionary)XamlReader.Load(xaml); 
this.Resources.MergedDictionaries.Add(dic); 

답변

5

으로 XAML 파일을로드 스 니펫. 필요한 규칙을 복사하여 App.xaml에 붙여 넣으십시오 (PhoneForegroundColor, PhoneBackgroundColor 및 관련 브러쉬 만 있으면 좋을 것입니다).

"테마 인식"을 유지하고 밝고 어두운 테마의 다른 이미지를로드하는 것이 더 좋습니다. 다음은이 작업을 수행하는 방법을 설명하는 문서입니다. http://blog.jayway.com/2010/12/16/theme-aware-panorama-background-in-windows-phone-7/

+0

매우 관련성이 높은 대답과 기사. 그러나이 ViewModel을 처리하는 것은 ViewModel의 책임이 아니라고 생각합니다 .XAML 방법을 찾지 못하면 – SandRock

+0

순수한 XAML 방식 (조건부 XAML과 같은 것은 없다)이 있다고 생각하지 않습니다. 다른 옵션은 사용자 정의 ValueConverter를 작성하여 올바른 배경을 선택하거나 ContentControl을 사용하여 두 개 중 하나를 선택하는 것입니다. 테마에 따라 달라지는 DataTemplates – Yousef

+1

Ok. 다음으로 조명을 만들었습니다.xaml 파일 (동작 만들기 : 내용, 복사 : 복사 안 함). 이 파일에는 사용자가 조명 테마를 사용하는 경우 덮어 쓸 리소스가 들어 있습니다. App.xaml.cs에서 light-theme-test가 통과하면 InitializePhoneApplication();을 실행 한 후 light.xaml을 동적으로로드합니다. 이것은 완전한 XAML 방식은 아니지만 5 줄의 코드 만 포함되어 있습니다. – SandRock

0

또 다른 가능성이 있습니다. these instructions에 따라 Coding4Fun Toolkit 변환기를 사용할 수 있습니다. 그러나 올바르게 사용할 수 없습니다.

또 다른 가능성은 OpacityMask입니다. 그러나 이는 흑백 이미지에만 적용됩니다./

Yousef의 솔루션은 재미있어합니다. 하지만로드하는 데 너무 많은 시간이 걸립니다. 앱이 시작된 후 이미지가 약 1 초마다 변경됩니다. 나는 이것을 Nokia 820에서 테스트했습니다. 나중에 호출 된 Loaded Event에서 DataContext를 설정하라는 요청을 이동했습니다. 이제 생성자에서 호출이 발생하므로 응용 프로그램이 이미지를 표시 할 때 이미 이미지가 설정됩니다. 그러나, 그것은 더 많은 로딩 시간을 추가합니다 : (이 문제를 개선하는 방법에 대한 제안 사항은 무엇입니까?

관련 문제