2017-09-28 10 views
0

내 사용자 지정 컨트롤의 기본 스타일은 Generic.xaml에 정의되어 있으며 정상적으로 작동합니다.WPF에서 사용자 지정 컨트롤의 암시 적 스타일 설정

그러나 사용자 정의 컨트롤의 스타일을 변경할 때 컨트롤이 내장 된 것과 같은 방법으로 아무 것도 발생하지 않습니다. App.xaml에서 나는 다음을 수행하여 내 컨트롤의 기본 스타일을 변경하는 것을 시도하고있다 : 모두가 잘 작동이 키를 사용하여이 스타일을 위의 스타일과 참조의 주요 특성 :

<Style TargetType="{x:Type my:CustomControl}"> 
    <Setter Property="Background" Value="Red"/> 
</Style> 

나는 X를 설정합니다.

위의 스타일 지정 방법은 기본 제공 컨트롤에서만 작동하며 사용자 지정 컨트롤에서는 작동하지 않습니까? 아니면 잘못된 것입니까? 맞춤형 컨트롤을 위해 이러한 유형의 스타일링을 구현할 수있는 실행 가능한 솔루션이 있습니까?

업데이트 이 경우 내 사용자 지정 컨트롤은 System.Windows.Window에서 파생됩니다.

+1

당신이 정적 생성자에서 DefaultStyleKeyProperty.OverrideMetadata을 설정, 아니면 당신은 몇 가지 해결 방법을 뭐하는거야? – shadow32

+0

"위의 스타일 지정 방법은 기본 제공 컨트롤에서만 작동하며 사용자 지정 컨트롤에서는 작동하지 않습니다 ...?" 아니, 그건 사실이 아니야. 당신은 아마도 당신의 통제 선언에서 어떤 일을 잘못했을 것입니다. 너도 그걸 보여줘야 해. – Clemens

+0

클레멘스 (Clemens)의 발언에 따라 나는 새로운 프로젝트에서 나의 사례를 재현하려고 노력했다. TextBox에서 상속하는 사용자 지정 컨트롤을 만들 때 암시 적 스타일이 올바르게 작동합니다. 그러나 똑같은 설정을 사용하고 Window에서 상속하도록 컨트롤을 변경하면 (내 원래의 문제 였음) 암시 적 스타일이 작동하지 않습니다. 다른 컨트롤과 달리 기본 클래스로 Window를 사용할 때 암시 적 스타일에 문제가 있습니까? – user6836683

답변

0

마침내 내 사용자 정의 컨트롤이 작동하도록 암시 적으로 스타일을 관리 할 수있었습니다. 스타일이 자동으로 컨트롤에 적용되지 않으므로 암시 적 스타일이 파생 컨트롤에 대해 작동하지 않을 수 있습니다. 이것을 달성하기 위해서는 자원 참조를 수동으로 설정해야합니다. 내 사용자 지정 컨트롤은 이제 다음과 같습니다

public class CustomControl : Window 
{ 
    static CustomControl() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl), new FrameworkPropertyMetadata(typeof(CustomControl))); 
    } 

    public CustomControl() 
    { 
     SetResourceReference(StyleProperty, typeof(CustomControl)); 
    } 
} 
-1

네, 맞습니다. Generic.xaml은 사용자 지정 컨트롤에 사용되고 App.xaml은 응용 프로그램 전체 리소스 (기본 제공 컨트롤의 스타일 포함)에 사용됩니다. App.xaml에 사용자 지정 컨트롤에 대해 TargetType을 지정하면 작동하지 않습니다. 따라서 명시적인 스타일 (x:Key)을 사용하는 것이 가장 쉬운 해결책 인 것 같습니다.

+0

이것은 잘못되었습니다. 물론 Generic.xaml (일반적으로 컨트롤 라이브러리 어셈블리)의 기본 컨트롤 Style과 App.xaml의 다른 기본 Style을 가질 수 있습니다. 후자는 자동으로 전자를 기반으로합니다. – Clemens