0

我有一个自定义控件,它基本上是一个内容控件

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

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

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

如果我将样式添加到包含的用户控件资源中,一切正常

 <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 中定义,有人有什么想法吗?

4

2 回答 2

1

一个简单static的应该做的伎俩...

 static PromoAlarmBox()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(PromoAlarmBox), new FrameworkPropertyMetadata(typeof(PromoAlarmBox)));
    }
于 2013-06-26T14:21:35.940 回答
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>
于 2013-06-26T20:36:51.910 回答