2016-01-19 5 views
5

क्यों सूची आखिरी रिकॉर्ड से पहली बार कूदता है जब मैं एक बार तीर कुंजी दबाता या नीचे दबाता हूं?सूची बॉक्स चयन तब तक ऊपर या नीचे नहीं जाता है जब तीर बटन दबाया जाता है

यहाँ कैसे पीछे

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new MainWindowViewModel(); 
     MyListbox.Focus(); 
    } 
} 

ViewModel

public class MainWindowViewModel : NotifyPropertyChanged 
{ 
    public MainWindowViewModel() 
    { 
     Entities = new ObservableCollection<string>() 
     { 
      "Batman", 
      "Superman", 
      "Shrek", 
      "Jack Frost", 
      "Wolverine" 
     }; 
     SelectedEntity = Entities.Last(); 
    } 

    public ObservableCollection<string> Entities { get; set; } 

    private string selectedEntity; 
    public string SelectedEntity 
    { 
     get { return selectedEntity; } 
     set { OnPropertyChanged(ref selectedEntity, value); } 
    } 
} 

इस समस्या

MainWindow

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ListBox x:Name="MyListbox" 
     ItemsSource="{Binding Entities}" 
     SelectedItem="{Binding SelectedEntity}" /> 
</Window> 

कोड पुन: पेश मैं एक बड़ी अनुप्रयोगों में इस समस्या पाया है आयन और मैंने इसे उपरोक्त कोड में अलगाव में पुन: उत्पन्न करने में कामयाब रहे, इसलिए जब विंडो दिखाई देती है तो सूची बॉक्स में आखिरी आइटम चुना जाएगा, अगर मैं तीर कुंजी दबाता हूं तो यह पिछले आइटम को पहले आइटम पर कूदता है। मैंने XAML की कुछ पंक्तियों पर Mode TwoWay, UpdateSourceTriggerPropertyChange आदि की कोशिश की, लेकिन कुछ भी काम नहीं किया।

यह केवल शुरुआत में होता है जब यह शीर्ष पर कूदता है तो यह व्यवहार करता है, अगर मैं माउस लेता हूं और आइटम पर क्लिक करता हूं और फिर कीबोर्ड का उपयोग करता हूं तो यह भी काम करता है।

+0

जब से मैं यकीन नहीं है और समय नहीं है एक टिप्पणी के रूप में छोड़ने का परीक्षण करने के लिए, लेकिन आप जारी रखने के बाद 'कीबोर्ड नेविगेशन। डायरेक्शनल नेविगेशन = साइकिल' का प्रयास कर सकते हैं क्योंकि यह डिफ़ॉल्ट है और यह कह रहा है "ओह, आप आखिरी बार हैं, आप स्पष्ट रूप से पहले दाईं ओर कूदना चाहते हैं?" ज्यादा या कम। एक त्वरित शॉट के लायक, किसी भी तरह से मैं वापस स्विंग करूँगा, हम सूची बॉक्स के साथ कीबोर्ड परिदृश्यों के एक टन के साथ संघर्ष करने के बीच में भी हैं। –

+0

@ChrisW। आपकी टिप्पणी के लिए धन्यवाद, हालांकि यह इस मुद्दे को ठीक नहीं करता है। क्या होता है, जब मैं आखिरी बार हूं और मैं ऊपर तीर दबाता हूं तो यह भी पहले में कूदता है, अगर मैं बीच में था, तो इससे कोई फर्क नहीं पड़ता कि मैं ऊपर या नीचे दबाता हूं, यह पहले के लिए कूद जाएगा: (, लेकिन केवल पहली बार, इसके बाद यह अपेक्षित काम करता है। आपके द्वारा दिए गए सुझाव ने मेरे पास एक अलग प्रश्न का उत्तर दिया :) यहां कीबोर्ड के कई मुद्दे भी हैं। – adminSoftDK

उत्तर

2

यह इसलिए होता है, क्योंकि जब आप सूची बॉक्स के लिए ध्यान केंद्रित करने के लिए सेट यह dosent चयनित आइटम पर लक्षित निर्धारित करते हैं, इस कोड के साथ-साथ आइटम पर लक्षित स्थापित करने के लिए का उपयोग करें ..

<ListBox.Resources> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="FocusManager.FocusedElement" 
           Value="{Binding RelativeSource={RelativeSource Self}}"></Setter>     </Trigger> 
      </Style.Triggers> 
     </Style> 
</ListBox.Resources> 
+0

आपके उत्तर के लिए धन्यवाद यह बहुत अच्छा काम करता है :) – adminSoftDK

+0

इस तरह की चीजें करने से मुझे आश्चर्य होता है कि माइक्रोसॉफ्ट क्या सोच रहा था जब उन्होंने फैसला किया कि डब्ल्यूपीएफ रिलीज होने के लिए तैयार था। –

संबंधित मुद्दे