2011-03-14 4 views
0

私は図書館で私のコントロールのstyleを宣言:グローバルスタイルでContextMenuをオーバーライドする方法は?

<ContentControl.Resources> 
    <ContextMenu x:Key="ContextMenu"> 
     <MenuItem Header="{x:Static Drawing:Headers.AddEdge}" Click="AddEdgeClick"/> 
     <MenuItem Header="{x:Static Drawing:Headers.ChangeID}" Click="ChangeIDClick"/> 
     <MenuItem Header="{x:Static Drawing:Headers.Remove}" Click="RemoveClick"/> 
    </ContextMenu> 
    <Style x:Key="Style" TargetType="{x:Type Drawing:Node}"> 
     <Setter Property="ContextMenu" Value="{StaticResource ContextMenu}"/> 
    </Style> 
</ContentControl.Resources> 

<ContentControl.Style> 
    <StaticResource ResourceKey="Style"/> 
</ContentControl.Style> 

しかし、動作しないアプリケーションでは、この制御のためのグローバルスタイル...あなたが明示的にスタイルプロパティを設定した場合

<Style TargetType="Drawing:Node"> 
    <Setter Property="ContextMenu" Value="{x:Null}"/> 
    <EventSetter Event="MouseLeftButtonUp" Handler="DirectoryClicked"/> 
</Style> 

答えて

0

要素を指定すると、暗黙的なスタイル(つまり、グローバルスタイル)は適用されません。グローバルスタイルが実際にデフォルトのスタイルである場合は、それを適用する必要がありますが、実行しているようには聞こえません。

あなたがそうのような、しかし、あなたの暗黙のスタイルであなたの明示的なスタイルをベースにすることができます

<Style x:Key="Style" TargetType="{x:Type Drawing:Node}" BasedOn="{StaticResource {x:Type Drawing:Node}}"> 
    <Setter Property="ContextMenu" Value="{StaticResource ContextMenu}"/> 
</Style> 

これは、その描画を想定し、もちろんです:ノード:ノードは、グラフノードと同じクラス/タイプです。

+0

ああ、すみません。私はコントロールライブラリで最初のサンプルを使用していますが、2番目のサンプルはアプリケーションで使用されています。 –

関連する問題