2009-07-18 7 views
1

WPF에서 체크 상자의 모양을 사용자 정의하려고합니다. 나는 PresentationFramework.Aero에 정의 된 BulletChrome 클래스의 기본 컨트롤 템플릿을 잡고 작업 할 수 있기를 바랬다. 그러나 BulletChrome은 Control의 서브 클래스가 아니므로 수정할 템플릿이 없습니다. 아무도 내가 이것을 할 수 있다는 것을 알고 있습니까?WPF에서 BulletChrome 요소 사용자 정의

답변

3

, 당신은 그렇게 할 수 있습니다.

다음 부분에서는 BulletChrome이 어떻게 보이게됩니까? 음, 이것은 WPF에서 드문 부분 중 하나입니다. 여기서 xaml을 사용하지 않고 렌더링을 완전히 처리합니다. ButtonChrome의 시각적 모양은 OnRender() 메서드에서 정의됩니다. 반사판에서

BulletChrome.OnRender() : 당신은 ButtonChrome를 서브 클래스하더라도 그들과 함께

protected override void OnRender(DrawingContext drawingContext) 
{ 
    Rect bounds = new Rect(0.0, 0.0, base.ActualWidth, base.ActualHeight); 
    this.DrawBackground(drawingContext, ref bounds); 
    this.DrawDropShadows(drawingContext, ref bounds); 
    this.DrawBorder(drawingContext, ref bounds); 
    this.DrawInnerBorder(drawingContext, ref bounds); 
} 

불행히도의 OnRender() 내에서 호출이 모든 방법은 개인이기 때문에, 당신이 할 수없는 혼란, 아마도 단지 상단에 렌더링의 일부를 오버레이합니다.

기본적으로 Reflector에서 렌더링 코드를 파고 자신의 필요에 맞게 수정하거나 자신의 템플릿/데코레이터/무엇이든 처음부터 다시 시작하십시오. (그러나 실제로 작동하는 한 실제로 사용하는 것은 중요하지 않습니다.)

희망이 있으시면 건의하십시오.

+0

큰 정보 주셔서 감사합니다! – MadPokey

+0

그건 Microsoft의 _WPF_가 아닙니다. – TernaryTopiary

1

당신은 이것을 원하지 않습니다. 컨트롤 템플릿을 변경하면 컨트롤의 비헤이비어를 변경하지 않아도되고 CheckBox 컨트롤에는 정의에 따라 세 가지 상태 (체크 됨, 선택 취소됨, 불확정성)가 있습니다.

CheckBox ControlTemplate에서 많은 Look/Feel을 빌려주는 사용자 지정 4 상태 (또는 원하는대로 n 상태) 컨트롤을 만드는 것이 좋습니다.

+0

그냥 명확히하기 위해 동작을 변경하려고하지 않습니다. 확인란에는 여전히 세 가지 상태가 있습니다. 저는 특정 조건에 따라 ButtonChrome 요소의 모양을 사용자 정의하고 싶습니다. – MadPokey

0

BulletChrome을 사용자 지정할 수없는 경우 사용자 지정할 수 없습니다. 그러나 당신은 그것을 커스터마이징 가능한 것으로 대체 할 수 있습니다.

실용적인 측면에서 나는 Aero 대신 Silverlight의 테마로 시작하는 것이 좋습니다. 당신은 클래식 템플릿에서 BulletDecorator이 갈 것 CheckBox에 '템플릿에서 BulletChrome의 일종을 배치 할 경우 BulletChrome이 FrameworkElement에서 상속 Decorator, 상속 이후

관련 문제