"쉽다"!테마를 Silverlight에서 WPF로 이식하는 방법은 무엇입니까?
그냥 Silverlight에서 WPF로 테마를 이식하는 것이 "쉽다"고 말하는 this blog post by Rudi Grobler이 있습니다. 불행히도, 그는 그것을하는 방법을 말하지 않습니다.
다운로드 및
내가 설치 한 모두는 CodePlex에서 WPF Toolkit 및 Silverlight 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에서에 붙여 넣기 (다시 경고 :이 아이는로드 속도가 느리다). 키 조각으로
, 내 말은 :
- 모든 브러쉬 파일의 시작 부분에 자원을 더한 이러한 컨트롤의 각
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">
이 아주 나쁜 생각처럼 보였다 : 여기
은 관련 조각입니다 컴파일 할 일을 얻으십시오.다른 변경 사항은 다음과 같습니다. SolidColorBrush
및 LinearGradientBrush
의 시작 부분에 대신 x:Name
이 사용되었습니다. 나는 모두를 x:Key
로 바 꾸었습니다. 아마도 이것은 또한 나쁜 생각 이었지만, 다시 컴파일러가 나를 만들었습니다.
이 정보가 도움이 되었습니까?
아직도 나와 함께한다면, 어떤 제안이 있으십니까?
아, 맞습니다. 실제로 WPF Themes 프로젝트에서 BureauBlue에 대한 리소스 사전이 있지만'DataGrid','DataPicker' 및'Calendar' 스타일은 포함되어 있지 않습니다. – devuxer
글쎄, 나는이 기회를 주었다. (내 질문에 대한 업데이트 참조), 너무 잘 풀리지 않았다. – devuxer