2010-05-11 4 views
0

나는 WPF에서 아주 새로운 말을해야한다. 나는 첫 번째 실제 응용 프로그램을 작성 중이며 주제가있는 현재 일부 문제에 직면하고 있습니다. 이것이 내 게시물의 이유입니다.WPF 테마 : TextBox에 적용되지 않습니다. 이유가 무엇입니까?

ExpressionDark.xaml과 같은 테마를 사용하려면 응용 프로그램 수준에서 테마를 포함하는 것으로 충분하다고 생각했습니다. 따라서 App.xaml에서 다음을 추가했습니다.

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Skins/ExpressionDark.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
     <myLib:Locator x:Key="Locator" /> 
    </ResourceDictionary> 
</Application.Resources> 

여기에 첫 번째 질문이 있습니다. 올바른 일을하고 있는지 확실하지 않습니다. ExpressionDark.xaml을 내 응용 프로그램, "스킨"폴더에 포함시키고 그런 식으로 참조하는 것이 옳은가요? 다른 곳에서 "System.Windows.Theming.ExpressionDark"등과 같은 것을 발견했습니다. 올바른 접근 방식이 될 것입니까?

어쨌든 위의 방법으로 테마를 적용하면 거의 모든 컨트롤이 적절한 방식으로 스타일이 적용된 것을 볼 수 있습니다. DataGrid 또는 TextBox와 같이 일부는 그렇지 않기 때문에 "거의 모두"라고 말합니다. ExpressionDark.xaml 내부를 조사한 결과 이러한 구성 요소에 대해 정의 된 스타일이 있음을 알았습니다. 그런데 왜 내가 이상한 행동을 취하는거야?

나는 모든 것을 분명히 설명했으면 좋겠다. 그렇지 않은 경우 알려주십시오.

미리 도움을 주셔서 감사합니다.

건배,

G.

+0

DataGrid 또는 TextBox를 정의 할 때 코드를 게시 할 수 있습니까? – ChrisF

답변

0

좋아, 나는 내가 무슨 일이 일어나고 있는지 알아 낸 것 같아요.

App.xaml에서 응용 프로그램에서 사용할 스타일 사전을 설정합니다. 내 MainWindow.xaml의 "로컬"리소스에는 App.xaml이 상속 한 사전을 덮어 쓰는 다른 사전이있었습니다.

응용 프로그램의 MergedDictionaries와 함께 로컬 사전 (창 중 하나)을 이동 시켰으며 모든 컨트롤의 스타일이 올바르게 지정되었습니다.

이 동작의 이유는 알 수 없습니다. 두 개의 사전은 충돌 할 의도가 아니었고, App에서 일반적인 Dict을 사용하고 Window에서보다 전문화 된 Dict를 사용할 수 있다고 가정했습니다.

그럼 내가 실제로 잘못하고있는 것에 대해 어떻게 생각하십니까?

다시 도움 주셔서 감사합니다. 건배, Gianluca.

+1

여러 스타일을 사용했기 때문에 컨트롤은 시각적 트리를 찾을 때 가장 먼저 사용했습니다. TextBox에 대한 Mainwindow.xaml에 정의가 있었기 때문에 다른 컨트롤은 App.xaml 파일과 멀리 떨어져야했습니다. 스타일을 찾지 못하는 컨트롤은 기본 크롬을 사용합니다. –

+0

마이크 B에게 그것을 지적 해 주셔서 감사합니다. –

관련 문제