2009-11-06 9 views
8

분명히 스타일에 적용된 스타일을 가질 수 있습니다. 스타일 내에서 글 머리 기호 요소를 정의 할 수 있는지 알아 보려면 xaml에서 반복적으로 정의하지 않아도됩니다.WPF에서 BulletDecorator 스타일을 지정할 수 있습니까?

<BulletDecorator> 
     <BulletDecorator.Bullet> 
      ...my bullet UIElement here... 
     </BulletDecorator.Bullet> 
     <TextBlock> 
      ... my text here... 
     </TextBlock> 
</BulletDecorator> 

답변

11

BulletDecorator.Bullet이 스타일을 지정할 수 없으며, BulletDecorator가 제어되지

<local:MyDecorator> 
    <TextBlock /> 
</local:MyDecorator> 
그래서 그것은 템플릿 화 될 수 없습니다.

이 같은 ContentControl을위한의 ControlTemplate을 정의하여 순수 XAML의 효과를 얻을 수있다 그러나 :

지금
<ControlTemplate x:Key="BulletTemplate" TargetType="{x:Type ContentControl}"> 
    <BulletDecorator> 
    <BulletDecorator.Bullet> 
     ...my bullet UIElement here... 
    </BulletDecorator.Bullet> 
    <ContentPresenter /> 
    </BulletDecorator> 
</ControlTemplate> 

이처럼 사용할 수 있습니다

<ContentControl Template="{StaticResource BulletTemplate}"> 
    <TextBlock /> 
</ContentControl> 

당신은 단지 그것을 사용하는 경우 몇 번, "< ContentControl Template = ..."기술은 정상적으로 작동합니다. 당신이 더 자주 사용하려는 경우, 당신은 MyBullet 클래스를 정의 할 수 있습니다 :

public class MyBullet : ContentControl 
{ 
    static MyBullet() 
    { 
    DefaultStyleKey.OverrideMetadata(typeof(MyBullet), new FrameworkPropertyMetadata(typeof(MyBullet)); 
    } 
} 

다음 테마/generic.xaml을로의 ControlTemplate 이동을 (또는 사전이 그것으로 합병)이 함께 포장 :

이렇게하면
<Style TargetType="{x:Type local:MyBullet}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate 
     ... 
    </Setter.Value> 
    </Setter> 
</Style> 

, 당신은 사용할 수 있습니다 어디서나

<local:MyBullet> 
    <TextBox /> 
</local:MyBullet> 

을 응용 프로그램에서.

1

글 머리 기호는 종속성 속성이 아니므로 스타일을 지정할 수 없습니다.

하지만 당신은 물론 실내 장식에서 파생 생성자에서 총알을 설정 자신의 클래스를 선언 할 수있다, 그래서 당신은 쓸 수 :

관련 문제