显然它可以应用一种样式 - 我试图找出是否有可能在样式中定义Bullet元素,因此你不必在xaml中反复定义它
<BulletDecorator>
<BulletDecorator.Bullet>
...my bullet UIElement here...
</BulletDecorator.Bullet>
<TextBlock>
... my text here...
</TextBlock>
</BulletDecorator>
答案 0 :(得分:12)
BulletDecorator.Bullet无法设置样式,并且BulletDecorator不是Control,因此无法模板化。
但是,您可以通过为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>
如果您只使用它几次,“&lt; ContentControl Template = ...”技术可以正常工作。如果您打算更频繁地使用它,可以定义一个MyBullet类:
public class MyBullet : ContentControl
{
static MyBullet()
{
DefaultStyleKey.OverrideMetadata(typeof(MyBullet), new FrameworkPropertyMetadata(typeof(MyBullet));
}
}
然后将您的ControlTemplate移动到Theme / Generic.xaml(或合并到其中的字典)并用它包装:
<Style TargetType="{x:Type local:MyBullet}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate
...
</Setter.Value>
</Setter>
</Style>
如果您这样做,可以使用:
<local:MyBullet>
<TextBox />
</local:MyBullet>
您应用程序中的任何位置。
答案 1 :(得分:1)
Bullet不是依赖属性,因此无法设置样式。
但是你当然可以声明你自己的派生派生的类并在构造函数中设置Bullet,所以你可以写:
<local:MyDecorator>
<TextBlock />
</local:MyDecorator>