2012-05-10 5 views
1

Silverlight DataGridでは、ユーザーが列ヘッダーの1つ、または列ヘッダー行の別の場所を右クリックしたときにコンテキストメニューを表示したいと考えています。これはどうすればいいですか?ここでSilverlight DataGridの列見出しのコンテキストメニューのみを表示するにはどうすればよいですか?

+0

public class ColumnHeaderContextMenu : Behavior<DataGrid> { public static readonly DependencyProperty ContextMenuProperty = DependencyProperty.Register("ContextMenu", typeof (ContextMenu), typeof (ColumnHeaderContextMenu), new PropertyMetadata(default(ContextMenu))); public ContextMenu ContextMenu { get { return (ContextMenu) GetValue(ContextMenuProperty); } set { SetValue(ContextMenuProperty, value); } } protected override void OnAttached() { base.OnAttached(); AssociatedObject.Loaded += HandleLoaded; AssociatedObject.Unloaded += HandleUnloaded; } private void HandleUnloaded(object sender, RoutedEventArgs e) { if (ContextMenu != null) { ContextMenu.Owner = null; } } private void HandleLoaded(object sender, RoutedEventArgs e) { var columnHeadersPresenter = AssociatedObject.GetVisualDescendants().OfType<DataGridColumnHeadersPresenter>().FirstOrDefault(); if (ContextMenu != null) { ContextMenu.Owner = columnHeadersPresenter; } } protected override void OnDetaching() { base.OnDetaching(); AssociatedObject.Loaded -= HandleLoaded; AssociatedObject.Unloaded -= HandleUnloaded; } } 

はこのようにそれを使用してください。 – ChrisF

+0

@ChrisFそれはなぜですか? Silverlight 4はコンテキストメニューをサポートしていますか? –

+0

SL5でのコンテキストメニューの操作はずっと簡単です。 – ChrisF

答えて

1

はあなたのためにこれを行います行動です:あなたはこれを行うことができるようにSilverlightの5をターゲットにする必要があります

<sdk:DataGrid> 
<i:Interaction.Behaviors> 
    <Behaviors:ColumnHeaderContextMenu> 
     <Behaviors:ColumnHeaderContextMenu.ContextMenu> 
      <Controls:ContextMenu> 
       <Controls:MenuItem Header="Choose Columns" Command="{Binding EditColumns}"/> 
      </Controls:ContextMenu> 
     </Behaviors:ColumnHeaderContextMenu.ContextMenu> 
    </Behaviors:ColumnHeaderContextMenu> 
</i:Interaction.Behaviors> 
</sdk:DataGrid> 
関連する問題