WPF DataGridTemplateColumn. Am I missing something?

前端 未结 4 413
死守一世寂寞
死守一世寂寞 2021-01-12 20:19
     
        
            
                &l         


        
4条回答
  •  终归单人心
    2021-01-12 20:42

    Here is my approach. Its very close to @Nalin Jayasuriya answer, but I didn't want to create a style. Also this solution selects the text in the TextBox. Anyway - the XAML for the hole DataGrid looks like this.

    
    
        
        
            
                
            
            
                
                    
                        
                    
                
            
        
    
    

    And the code-behind.

    private void TextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        try
        {
            ((TextBox)sender).SelectAll();
        }
        catch (Exception ex) { GlobalDebug.debugForm.WriteText(ex); }
    }
    
    private void TextBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        try
        {
            // If its a triple click, select all text for the user.
            if (e.ClickCount == 3)
            {
                ((TextBox)sender).SelectAll();
                return;
            }
    
            // Find the TextBox
            DependencyObject parent = e.OriginalSource as UIElement;
            while (parent != null && !(parent is TextBox))
            {
                parent = System.Windows.Media.VisualTreeHelper.GetParent(parent);
            }
    
            if (parent != null)
            {
                if (parent is TextBox)
                {
                    var textBox = (TextBox)parent;
                    if (!textBox.IsKeyboardFocusWithin)
                    {
                        // If the text box is not yet focussed, give it the focus and
                        // stop further processing of this click event.
                        textBox.Focus();
                        e.Handled = true;
                    }
                }
            }
        }
        catch (Exception ex) { GlobalDebug.debugForm.WriteText(ex); }
    }
    

    For a more info, have a look at my blog: http://blog.baltz.dk/post/2014/11/28/WPF-DataGrid-set-focus-and-mark-text

提交回复
热议问题