2009-11-06 4 views
8

Очевидно, это может быть стиль применен к этому - то, что я пытаюсь выяснить, если его можно определить элемент Пули в стиле, так что вам не придется держать определения его снова и снова в XAMLМожно ли стиль BulletDecorator в WPF?

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

ответ

11

BulletDecorator.Bullet не может быть стилизовано, и BulletDecorator не Control поэтому он не может быть запрограммирован.

Однако вы можете получить эффект в чистом XAML, определяя ControlTemplate для ContentControl как это:

<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)); 
    } 
} 

затем переместить свой ControlTemplate в теме/Generic.xaml (или словарь сливались в него) и завернуть его с этим:

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

Если вы сделаете это, вы можете использовать:

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

где-нибудь в вашем приложении.

1

Пуля не является свойством зависимостей, поэтому ее нельзя назвать стилем.

Но вы могли бы, конечно, объявить свои собственные классы, производные от Decorator и установить пули в конструкторе, так что вы могли бы написать:

<local:MyDecorator> 
    <TextBlock /> 
</local:MyDecorator> 
Смежные вопросы