WPF内容控件样式

时间:2013-06-26 14:12:19

标签: c# wpf styles

我有一个自定义控件,基本上是一个contentcontrol

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

我将其添加到包含用户控件

<controls:PromoAlarmBox Grid.Row="9" Grid.Column="1"  />

如果我将样式添加到包含usercontrols资源,一切正常

 <UserControl.Resources>
        <Style  TargetType="{x:Type controls:PromoAlarmBox}">
            <Setter Property="ContentControl.ContentTemplate">
                <Setter.Value>
                    <DataTemplate >
                        <Rectangle Fill="Blue" Stroke="Black" Height="20" Width="20"/>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>

但是,如果我将它添加到自定义控件项目中的generic.xaml,则不显示任何内容

<Style  TargetType="{x:Type local:PromoAlarmBox}">
        <Setter Property="ContentControl.ContentTemplate">
            <Setter.Value>
                <DataTemplate >
                    <Rectangle Fill="Blue" Stroke="Black" Height="20" Width="20"/>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我知道这个样式是应用的,因为我在generic.xaml中定义了样式的同一个项目中有其他控件,任何人有什么想法?

2 个答案:

答案 0 :(得分:1)

一个简单的static应该可以解决这个问题......

 static PromoAlarmBox()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(PromoAlarmBox), new FrameworkPropertyMetadata(typeof(PromoAlarmBox)));
    }

答案 1 :(得分:0)

虽然我不确定为什么使用样式作为本地资源以及使用泛型时存在差异,但这对我有用

<Style TargetType="{x:Type local:PromoAlarmBox}">

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ContentControl">
                    <Rectangle VerticalAlignment="Stretch" Fill="Yellow" Stroke="Black" Height="20" Width="20"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>