1

ここから例を挙げてみます

http://msdn.microsoft.com/en-us/library/ff407126

ユーザーが表示する列を定義できるコントロールを追加したいと思います。これは簡単にできますか?

http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/を見つけましたが、CollectionViewを使用していないため異なります。およびCollectionViewSource。

ありがとう&BR-マティ

4

1 に答える 1

3

それは多くの方法で行うことができます。1つの方法は、DataGridの列ヘッダーのスタイルを編集することです。列ヘッダーのスタイルの例は、次の場所にあります。

WPF DataGrid列ヘッダースタイル、コードビハインドのメニュー表示を変更しますか?

上記の記事のようにControlTemplateにメニューを表示する代わりに、列ヘッダー用に次のようなボタンを使用できます。

<Button Grid.Column="2" Name="MultiButton" MouseRightButtonDown="MultiButton_MouseRightButtonDown" Click="MultiButton_Click" Visibility="Hidden">X</Button>

ボタンは2番目のマウスボタンでポップアップメニューを開き、クリックすると列が削除されます。ボタンはデフォルトで非表示になっているため、マウスが列ヘッダーに移動したときにボタンを表示するには、トリガーが必要です。

<Trigger Property="IsMouseOver" Value="True" >
    <Setter Property="Visibility" TargetName="DeleteColumn" Value="Visible" />                            
</Trigger>

すべての列にボタンがあるため、クリックイベントは非表示にする列を分類する必要があります。

private void MultiButton_Click(object sender, RoutedEventArgs e)
{
   object dataContext = ((FrameworkElement)sender).DataContext;
   foreach (DataGridColumn col in dataGrid1.Columns)
   {
       if (col.Header.ToString() == dataContext.ToString())
       {
           col.Visibility = Visibility.Hidden;
       }
   }
}

これは最善の方法ではないかもしれませんが、機能します。

于 2012-05-17T13:40:02.437 に答える