4

DataGridウィンドウの左側にWPFがあり、右側に選択したレコードを表示するための領域がある場合。選択したレコードは、編集ボタンがクリックされるまで無効になっているTextboxesとesで構成されています。ComboBoxすべてが期待どおりに機能します。

ただし、変更時にComboBoxesを入力するのは少し不器用なようです。[編集]ボタンをクリックするまでは、などのはるかに軽いコントロールを使用できます。その後、sをesに切り替えることができます。SelectedItemDataGridTextBlockTextBlockComboBox

これはある種のテンプレートで実行できると確信していますが、これを試してみると、ComboBoxesに関連付けられているすべてのイベントは、でTextBlocksに置き換えられているため、存在しなくなったため、エラーが報告されます。 "ビューモード"。

私はおそらくこれについて間違っているので、いくつかのガイダンスをいただければ幸いです。

4

3 に答える 3

3

ここに優れた記事があります

DataGridのすべてのセルにシングルクリック編集を適用するには

  1. 以下のスタイルをDataGridのリソースに貼り付けます
  2. メソッドをコードビハインドに貼り付けます

DataGridの特定のセルのみにシングルクリック編集を適用するには

  1. スタイルにx:Keyを設定します(例)
  2. スタイルをDataGridのリソースに貼り付けます
  3. シングルクリック編集を行う列のCellStyleプロパティにスタイルを適用します(例)。
  4. メソッドをコードビハインドに貼り付けます

    //
    // SINGLE CLICK EDITING
    //
    private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        DataGridCell cell = sender as DataGridCell;
        if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
        {
            if (!cell.IsFocused)
            {
                cell.Focus();
            }
            DataGrid dataGrid = FindVisualParent<DataGrid>(cell);
            if (dataGrid != null)
            {
                if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow)
                {
                    if (!cell.IsSelected)
                        cell.IsSelected = true;
                }
                else
                {
                    DataGridRow row = FindVisualParent<DataGridRow>(cell);
                    if (row != null && !row.IsSelected)
                    {
                        row.IsSelected = true;
                    }
                }
            }
        }
    }    
    
    static T FindVisualParent<T>(UIElement element) where T : UIElement
    {
        UIElement parent = element;
        while (parent != null)
        {
            T correctlyTyped = parent as T;
            if (correctlyTyped != null)
            {
                return correctlyTyped;
            }
    
            parent = VisualTreeHelper.GetParent(parent) as UIElement;
        }
        return null;
    } 
    
于 2009-06-12T12:05:54.483 に答える
1

ContentTemplateSelectorプロパティを使用すると、現在のモード(表示/編集)に応じて1つのテンプレートまたは別のテンプレートを選択できます。

于 2009-06-03T23:20:27.380 に答える
0

マークされた回答リンクは無効です。

これは代わりに役立つかもしれません: http ://wpf.codeplex.com/wikipage?title = Single-Click%20Editing

于 2012-12-16T12:40:10.737 に答える