יש לי ComboBox שהטמפלט של האייטמס הוא DataGrid.
ובכן, במידה ונבחרה ערך מסויים (שהוא בעצם ערך מתוך ה DataGrid), אני רוצה שהערך הזה יהיה בראש ה DataGrid, ואז כשהמשתמש יפתח את הרשימה (Combobox), הוא מיד יראה את הערך מודגש ובראש ה DataGrid.
להלן הקוד שקודדתי ב- ComboBox ע"מ שיתבצע בטעינת ה DataGrid שבתוך ה ComboBox:
Private Sub DataGrid_Loaded(sender As DataGrid, e As RoutedEventArgs) Handles DataGrid.Loaded
If Me.SelectedItem Is Nothing Then Exit Sub
DataGrid.SelectedItem = SelectedItem
Dim sv = sender.FindVisualChild(Of ScrollViewer)
If sv IsNot Nothing Then sv.ScrollToEnd()
DataGrid.ScrollIntoView(SelectedItem)
sender.Focus()
End Sub
[u:fre0wxnl]אסביר קצת על הקוד:[/u:fre0wxnl]
בתחילה (שורה 3) אני קובע שהרשומה הנבחרת ב DataGrid תהיה הערך הנבחר ב ComboBox.
לאחר מכן (שורה 4,5) אני מחפש את ה ScrollViewer ואני מגלגל אותו לסוף ה DataGrid (בהמשך אסביר למה אני צריך את זה).
אח"כ (שורה 6) אני מדפדף ל רשומה הנבחרת.
אח"כ (שורה 7) אני מעביר את הפוקוס ל DataGrid כדי שהרשומה הנבחרת תהיה מספיק מודגשת (כאשר זה לא בפוקוס, הרשומה הנבחרת לא מודגשת מספיק).
הסיבה שהייתי צריך לגלגל את ה Scriller לסוף הDataGrid, שאם לא כן, הדפדוף לרשומה הנבחרת לא מביא אותו לראש ה DataGrid, אלא רק עש שהוא נראה, ולכן אם הוא מגיע מהסוף אז הוא נשאר בראש הרשימה.
הבעייה היא שהקוד השזה לא תמיד עובד, זאת אומרת - לעתים קרובות הדפדוף עד הסוף עובד, אבל הדפדוף לרשומה הנבחרת לא עובד. לא הצלחתי להבין את הסיבה.
מישהוא יכול לעזור לי בזה, או לתת לי פיתרון אחר ? זה נורא דחוף לי אני כבר מתעסק עם זה מדי הרבה זמן. תודה מראש
פורסם במקור בפורום CODE613 ב28/12/2016 14:12 (+02:00)