2011-03-04 3 views
15

어떻게 코드 뒤에 다음을 설정할 수 있습니까?BasedOn = "{StaticResource {x : Type TextBox}}"스타일의 코드 뒤에

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 

내가 테마를 사용하여 App.xaml을 병합했습니다. 모든 컨트롤에서 잘 작동하지만 스타일을 정의 할 때 (예 : TextBox의 경우 위와 같이 BasedOn을 사용하지 않으면 테마 스타일이 선택되지 않고 기본값 인 TextBox 스타일이 적용됩니다.

는 지금은 뒤에 코드에서 DataGridTextColumn을 만드는거야 그리고 나는 BasedOn 부분은 EditingElementStyle

Style editingStyle = new Style(typeof(TextBox)); 
editingStyle.BasedOn = ...?; 

어떤 제안을 작동시킬 수없는 이유는 무엇입니까? 또한 BasedOn을 사용하지 않고 기본 스타일 대신 테마 스타일을 적용 할 수있는 방법이 있습니까?

감사

+0

로컬 스타일이 영향을받는 테마 구성 요소를 오버라이드 (override) :

그래서 나는이 추천? –

+0

@Aaron : 모든 컨트롤에 영향을 미치는 테마를 사용하고 있습니다. 하지만 여러 곳에서 특정 Setter, 트리거 등을 추가해야합니다. 예를 들어 ListBox ItemContainerStyle에 'ListBoxItem.IsSelected'를 바인딩합니다. 추가 설정 기와 함께 적용된 테마 스타일을 원합니다. –

답변

22

이 시도 :

Style baseStyle = new Style(typeof(TextBox)); 
Style editingStyle = new Style(typeof(TextBox)); 
editingStyle.BasedOn = baseStyle; 

또한 생성자에서 그것을 할 수 있습니다 너를 어떻게 생각하는지 모르겠다. The BasedOn을 지정하지 않고 Theme 스타일을 적용합니다. 그런 방법이 있다면, 나는 그것을 알고 싶다 ...

2

이 작동합니다 :

editingStyle.BasedOn = (Style) FindResource(typeof (TextBox)) 

그리고 나는 '돈 :

Style editingStyle = new Style(typeof(TextBox), baseStyle); 
+0

답변 해 주셔서 감사합니다! 그래, 그게 좋겠지 만 Theme Style은 어떤 이유로 든 선택되지 않았 으면 좋겠다. 내가 Xaml에서 그것을한다면 그것은 작동합니다 .. –

1

나는 answer of Pavlo Glazkov을 좋아하지만 컴파일하지 않는다.

FindResource는 (non-static) member of FrameworkElement입니다. 검색 요청의 컨텍스트를 식별해야합니다. 당신은 주어진 제어에 적용되는 테마를 얻으려고 노력하고 있습니다 있습니다

style.BasedOn = (Style)frameworkElement.FindResource(typeof(TextBox));