जब मैं WPF डेटाग्रिड में टैब करता हूं तो यह पहले सेल (आयताकार के साथ) पर केंद्रित होता है लेकिन इसे (नीले रंग में) नहीं चुनता है। यदि मैं फिर से टैब दबाता हूं तो यह और पर केंद्रित करता है।जब आप पहली बार इसमें टैब करते हैं तो WPF डेटाग्रिड एक सेल का चयन कैसे करते हैं
मुझे लगता है कि डेटाग्रिडसेल वास्तव में IsSelected = true है, लेकिन इसे नीले रंग में चित्रित नहीं किया जा रहा है। मैंने डेटाग्रिड और विजुअल-स्टेटस के साथ हैकिंग करने की कोशिश की है, लेकिन जब आप पहली बार टैब करते हैं तो मैं ग्रिड को सही ढंग से पुन: पेश नहीं कर सकता।
क्या किसी ने इसे पहले देखा है और क्या आपके पास समाधान है?
कोड पुन: पेश करने:
MainWindow.xaml पाठ बॉक्स पर
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBox Width="100"/>
<DataGrid SelectionMode="Single" SelectionUnit="Cell"
ItemsSource="{Binding MyItems}" AutoGenerateColumns="True"/>
</StackPanel>
</Window>
MainWindow.xaml.cs
using System.Collections.Generic;
using System.Windows;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyItems.Add(new Thingy() { Name = "Frank", Age = 34 });
MyItems.Add(new Thingy() { Name = "Jim", Age = 43 });
MyItems.Add(new Thingy() { Name = "Bob", Age = 56 });
MyItems.Add(new Thingy() { Name = "Harry", Age = 23 });
DataContext = this;
}
private List<Thingy> _myItems = new List<Thingy>();
public List<Thingy> MyItems
{
get { return _myItems; }
}
}
public class Thingy
{
public string Name { get; set; }
public int Age { get; set; }
}
}
क्लिक करें, फिर टैब मारा --- सेल 1 चयनित नहीं है
हिट टैब फिर से --- सेल 2 चुना गया है
किसी भी मदद की बहुत सराहना की है, धन्यवाद।
अद्यतन:
जब SelectionUnit = FullRow, मैं नीचे दिखाया गया पंक्तियों के साथ कुछ सफलता, अगर SelectedIndex निर्माण पहली पंक्ति अब नीले रंग में चयनित है पर 0 पर सेट है पड़ा है। इसे अभी भी शिफ्ट-टैब इत्यादि से निपटने के लिए कुछ काम की ज़रूरत है। अभी भी एक समस्या है क्योंकि जब मैं चयन मोड को विस्तारित करता हूं और शिफ्ट-डाउनारो दबाता हूं तो दूसरी पंक्ति का चयन किया जाता है लेकिन पहली पंक्ति को अचयनित किया जाता है (उन्हें दोनों का चयन किया जाना चाहिए) । यदि मैं इसे फिर से करता हूं तो पंक्तियां 2 + 3 चयनित होती हैं जो सही होती हैं और इसके बाद ठीक काम करना जारी रहता है।
protected override void OnIsKeyboardFocusWithinChanged(DependencyPropertyChangedEventArgs e)
{
base.OnIsKeyboardFocusWithinChanged(e);
int oldIdx = this.SelectedIndex;
this.SelectedIndex = -1;
this.SelectedIndex = oldIdx;
}
इसके अलावा अद्यतन:
निजी _selectionAnchor क्षेत्र की स्थापना द्वारा तय कि इस मुद्दे को। (धन्यवाद ILSpy)
protected override void OnIsKeyboardFocusWithinChanged(DependencyPropertyChangedEventArgs e)
{
base.OnIsKeyboardFocusWithinChanged(e);
this.SelectedIndex = -1;
this.SelectedIndex = 0;
SelectionAnchor = SelectedCells[0];
}
protected DataGridCellInfo? SelectionAnchor
{
get
{
return typeof(DataGrid).GetField("_selectionAnchor", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this) as DataGridCellInfo?;
}
set
{
typeof(DataGrid).GetField("_selectionAnchor", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(this, value);
}
}
मुझे लगता है कि आपको हैफोकस का उपयोग करने की आवश्यकता है लेकिन सकारात्मक नहीं है इसलिए मैं उत्तर के रूप में पोस्ट नहीं कर रहा हूं। – Paparazzi
उत्सुकता से, मुझे डीबगिंग के दौरान 'डेटाग्रिड' के गुणों को स्नूप करने का प्रयास करते समय 'StackOverflowException' मिलता है। –