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 に答える