Можно ли создать стиль BulletDecorator в WPF?
очевидно, что к нему может быть применен стиль - что я пытаюсь выяснить, возможно ли определить элемент Bullet в стиле, поэтому вам не нужно продолжать определять его снова и снова в xaml
<BulletDecorator>
<BulletDecorator.Bullet>
...my bullet UIElement here...
</BulletDecorator.Bullet>
<TextBlock>
... my text here...
</TextBlock>
</BulletDecorator>
2 ответов
BulletDecorator.Пуля не может быть стилизовано, и BulletDecorator-это не контроль, поэтому он не может быть шаблонных.
однако вы можете получить эффект в чистом 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>
если вы используете его только несколько раз, " затем переместите ControlTemplate в тему / Generic.xaml (или словарь, объединенный в него) и оберните его следующим образом: если вы это сделаете, вы можете использовать: в любом месте в вашем приложении.public class MyBullet : ContentControl
{
static MyBullet()
{
DefaultStyleKey.OverrideMetadata(typeof(MyBullet), new FrameworkPropertyMetadata(typeof(MyBullet));
}
}
<Style TargetType="{x:Type local:MyBullet}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate
...
</Setter.Value>
</Setter>
</Style>
<local:MyBullet>
<TextBox />
</local:MyBullet>
Bullet не является свойством зависимости, поэтому его нельзя стилизовать.
но вы, конечно, можете объявить свои собственные классы, производные от Decorator и установить пулю в конструкторе, чтобы вы могли написать:
<local:MyDecorator>
<TextBlock />
</local:MyDecorator>