2009-10-23 2 views
7

"쉽다"!테마를 Silverlight에서 WPF로 이식하는 방법은 무엇입니까?

그냥 Silverlight에서 WPF로 테마를 이식하는 것이 "쉽다"고 말하는 this blog post by Rudi Grobler이 있습니다. 불행히도, 그는 그것을하는 방법을 말하지 않습니다.


다운로드 및

내가 설치 한 모두는 CodePlex에서 WPF ToolkitSilverlight Toolkit를 설치합니다.

the source code for the theme I'm interested in (BureauBlue) (경고 :로드하는 데 시간이 조금 걸립니다.) 또한 테스트 프로젝트의 새로운 리소스 사전 파일에 붙여 넣었습니다.


UT 오, 깨진 참조

구불 구불 한 파란색 선 많아요. 여기

alt text http://img32.imageshack.us/img32/6032/brokenreferences.jpg


참조가 그래서, 참조 및 추가 가본 발견 ... 그들은 표시되지 않습니다.

alt text http://img35.imageshack.us/img35/7466/addreferencedialog.jpg


아이있다 그들은

다행히, 나는 약간 넓은 검색 후 그들을 찾을 수 있었다이다.


alt text http://img269.imageshack.us/img269/3830/addreferencedialogbrows.jpg

그리고는 그래서, 누락 된 참조를 발견 데 그

추가 내가 추가하려고했습니다. 이것은 실제로 (파란색 구불 구불 한 선이 멀리 갔다 적어도) 깨진 xmlns 링크를 해결 듯,하지만 난 내 프로젝트를 구축하면 오류 가지고 :

Error 1 Unknown build error, 'Cannot resolve dependency to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' NmtConcept


을 그리고, 내가 물어 ...

WPF에서 Silverlight 테마 작업을 어떻게 만듭니 까?


업데이트!

글쎄, 내가 알아 냈다고 생각했다. 나는 DataGrid으로 시작하기로 결정했습니다.WPF에 상응하는 모든 기능이 Silverlight 어셈블리 용으로 무엇인지 알아 냈습니다. 실제로 프로젝트를 컴파일하고 실행했습니다. 그리고 나는 결과를보고 ...

alt text http://img44.imageshack.us/img44/2418/porteddatagrid.jpg

헤더가 (누락 된 정렬 화살표 제외) 어느 정도 정확하지만 그 나머지는 황갈색 벽돌을 포함하는 끔찍한 사고의 어떤 종류가 있었다처럼 보인다

.

다음은 Silverlight Toolkit webpage의 예입니다.

alt text http://img196.imageshack.us/img196/997/silverlightdatagrid.jpg

그래서 나는 근처에도 오지 않았다.


내가

를 무슨 짓을 제가이 혼란에 도달하기 위해 무엇을했는지 설명하기 위해 소요됩니다.


DataGridFrozenGrid

첫째, 나는 WPF는 이러한 클래스 들어 본 적이 있기 때문에 this Silverlight Toolkit source code page에서 DataGridFrozenGrid을 잡아했다.


BureauBlue 그런 다음 나는 키 조각 the source code for BureauBlue에서에 붙여 넣기 (다시 경고 :이 아이는로드 속도가 느리다). 키 조각으로

, 내 말은 :

  1. 모든 브러쉬 파일의 시작 부분에 자원을 더한 이러한 컨트롤의 각
  2. Style :

    • DataGridColumnHeader을
    • DataGridCell
    • DataGridRowHeader
    • DataGridRow는

이상하게도, 원본 파일은 DataGrid 자체에 대한 스타일을 포함하지 (내가 틀렸다면 수정하시기 바랍니다,하지만 난 찾기 및 모두를 사용).


실버 라이트는 -> WPF

다음, 나는 WPF의 등가물에 xmlns 참조를 변환.여기 내 ResourceDictionary 요소가 어떻게 밝혀 졌습니까?

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mwc="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    xmlns:mwcp="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit" 
    xmlns:swcp="clr-namespace:System.Windows.Controls.Primitives;assembly=CommonLibraryWpf" 
    xmlns:sw="clr-namespace:System.Windows;assembly=WPFToolkit"> 

당연히 일치시킬 이름 공간 태그를 편집했습니다.


편집 나는이 모든 작업을 한 후에는

를 작동 할 때까지, 나는 여전히 몇 가지 사소한 문제가 있었다. x:Name 요소 중 일부에 공백이 있습니다. 컴파일러는 이것을 허용하지 않으므로 공백을 밑줄로 대체해야했습니다. - 내 모든 문제의 원인이 될 수 있습니다 -하지만 난에 할 그 밖의 무엇을 몰랐다 이러한 이름을 변경

<!-- Important: all underscores used to be spaces --> 
<sw:VisualState 
    x:Name="MouseOver_CurrentRow_Selected"> 
<sw:VisualState 
    x:Name="Normal_CurrentRow"> 
<sw:VisualState 
    x:Name="Normal_Selected"> 
<sw:VisualState 
    x:Name="Normal_EditingRow"> 
<sw:VisualState 
    x:Name="Normal_AlternatingRow" /> 
<sw:VisualState 
    x:Name="Normal_Selected"> 
<sw:VisualState 
    x:Name="MouseOver_Selected"> 
<sw:VisualState 
    x:Name="Unfocused_Selected"> 

이 아주 나쁜 생각처럼 보였다 : 여기

은 관련 조각입니다 컴파일 할 일을 얻으십시오.

다른 변경 사항은 다음과 같습니다. SolidColorBrushLinearGradientBrush의 시작 부분에 대신 x:Name이 사용되었습니다. 나는 모두를 x:Key로 바 꾸었습니다. 아마도 이것은 또한 나쁜 생각 이었지만, 다시 컴파일러가 나를 만들었습니다.


이 정보가 도움이 되었습니까?

아직도 나와 함께한다면, 어떤 제안이 있으십니까?

답변

2

나는 둥근 구멍에 사각형의 못을 끼워 넣으려고했다는 결론에 이르렀다. ("쉽다"는 주장에도 불구하고). Silverlight DataGrid은 WPF Toolkit DataGrid과 너무 다릅니다. 그래서, 지금은 BureauBlue처럼 보이도록 기본 데이터 격자 스타일을 지정하려고했습니다. 그것은 아주 고된 작업이며 완벽하지는 않습니다. 그러나 이식 된 스타일에 비해 확실한 개선입니다.

alt text http://img26.imageshack.us/img26/7163/styleddatagrid.jpg

1

해결되지 않은 참조가 Silverlight 버전의 System.Windows.dll에 있다고 생각합니다. dll의 WPF 버전을 가리 키도록 테마 프로젝트의 참조를 변경해야합니다.

이미 BureauBlue가있는 WPF themes 프로젝트 (Rudi Grobler가 조정)를 볼 수도 있습니다.

+0

아, 맞습니다. 실제로 WPF Themes 프로젝트에서 BureauBlue에 대한 리소스 사전이 있지만'DataGrid','DataPicker' 및'Calendar' 스타일은 포함되어 있지 않습니다. – devuxer

+0

글쎄, 나는이 기회를 주었다. (내 질문에 대한 업데이트 참조), 너무 잘 풀리지 않았다. – devuxer

관련 문제