2

このテンプレートを使用したカスタムコントロールには、この汎用スタイルがあります。

<Style TargetType="{x:Type local:MyType}">        
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:MyType}">                    
                    <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                        <local:MyControl />
                    </Border>
                    ...

このスタイルがグローバルに設定されているプロジェクトでこのコントロールが使用されている場合:

<Style  TargetType="{x:Type Border}">
    <Setter Property="Padding" Value="3" />
    <Setter Property="VerticalAlignment" Value="Top" />
</Style>

しかし、MyControlは通常の内容UserControlです:..。

<Border .. />

次に、UserControlの境界線(テンプレートにある)もこのスタイルを継承します(パディング3など)。
これらのグローバルスタイルを継承しないようにControlTemplateのコントロールを言う方法はありますか?言うまでもなく。汎用テンプレートです

4

2 に答える 2

2

私があなたを正しく理解したかどうかはわかりません。すべてのコントロールのスタイルがグローバルに指定され、x:key なしで自動的に継承されるという同様の状況があったため、いくつかの回避策を講じました。

一部のコントロールのスタイルを削除し、一部のコントロールに別のスタイルを適用する必要がありました。

その状況では、私は別のスタイルを作成しました(以下ではスタイルを削除したいなど)ので、空のスタイルを作成し、必要な場所とコントロールに使用しました。

空のスタイル:

<Grid.Resources>
    <ResourceDictionary>
        <Style x:Key="EmptyStyle"/>
    </ResourceDictionary>
</Grid.Resources>

コントロールに適用:

<TextBlock Text="First Name" Style="{StaticResource EmptyStyle}" />
于 2014-09-11T14:16:22.777 に答える
0

ax:Key を使用してスタイルをリソース ディクショナリに配置できます。私は常にこれを行っており、コントロールでキーを指定した場合にのみスタイルが適用されます。

于 2012-07-04T10:56:38.793 に答える