2009-11-06 13 views
8

明らかに、それはスタイルを適用することができます - スタイル内でBullet要素を定義することが可能であるかどうかを調べるために何をしようとしているのですか?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 Template="{StaticResource BulletTemplate}"> 
    <TextBlock /> 
</ContentControl> 

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

今、あなたはこのようにそれを使用することができます:あなたはこのようContentControlにのためのControlTemplateを定義することによって、純粋なXAMLで効果を得ることができますしかし

何度か、 "< 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

Bulletは依存関係プロパティではないため、スタイリングすることはできません。

しかし、あなたはもちろんのDecoratorから派生し、コンストラクタで箇条書きを設定する独自のクラスを宣言することができ、あなたが書くことができる:

関連する問題