2010-08-18 5 views
0

내 테마 디렉토리의 generic.xaml에 정의 된 기본 스타일을 가진 내가 작성한 디자인이 있습니다. 나는 또한 생성자에서 다음을 갖는다.WPF Lookless 컨트롤이 VS 디자이너에 표시되지 않습니다.

static MyControl() 
{ 
    DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl))); 
} 

public MyControl() 
{ 
    //DoSomeWork 
} 

WPF에서 설정해야 할 것이 있습니까? Silverlight에서해야 할 일은 다음과 같습니다.

DefaultStyleKey = typeof(MyControl); 

참고 : Expression Blend에서는 렌더링을 수행합니다.

답변

1

해당 생성자는 정적입니까? 그렇지 않다면, 그것은 있어야합니다. OverrideMetadata 호출은 제대로 작동하려면 정적 생성자에 있어야합니다. 변경 또는 추가 :

static MyControl() 
{ 
    DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl))); 
} 
+0

여전히 VS에서 작동하지 않습니다. Expression Blend에서 여전히 작동합니다. – cjibo

+0

정적 생성자에서는 액세스 한정자를 사용할 수 없습니다. – cjibo

+0

나는 때때로 VS의 디자이너가 어리 석다는 것을주의해야한다. 2k10 디자이너는 2k8, tho보다 좋습니다. –

0

VS 디자이너가 충돌하거나 모양과 같은 단순한 테두리 만 표시됩니다.

나는 제안 할 것이다. 상대적으로 가벼운 컨트롤을위한 별도의 스타일이 있습니다. IsInDesignTime 여부를 확인하여 컨트롤의 생성자에서 해당 스타일을 적용하십시오.

디자이너가 충돌하거나 오류가 표시되는 경우. 그런 다음 디자인 타임 디버깅을 시도해야합니다.

또한 경우에 따라 응용 프로그램 유형이 ".NetFramework 4 Client Profile"인 경우 [VS2010의 기본 wpf 응용 프로그램 유형]에 이와 같은 유선 항목이 나타날 수 있습니다.

HTH

0

당신은 당신의 어셈블리에이 속성을 추가나요 : 이것은 일반적으로 AssemblyInfo.cs 파일에 넣고

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 
    //(used if a resource is not found in the page, 
    // or application resource dictionaries) 
    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries))] 

. WPF에게 generic.xaml 파일을 찾을 곳을 알려줍니다.

관련 문제