วิธีบังคับให้ ItemContainerGenerator สร้างคอนเทนเนอร์สำหรับไอเท็มหรือวิธีเลื่อน TreeView ไปยังโหนดขยายเมื่อเปิดใช้งานการจำลองเสมือนของ UI

TreeView ไม่มีวิธี ScrollIntoView()
วิธีเดียวคือการเรียก TreeVewItem.BringIntoView() สำหรับคอนเทนเนอร์รายการข้อมูลที่เกี่ยวข้อง
แต่ถ้ามองไม่เห็นโหนดและยังไม่มีการสร้างคอนเทนเนอร์ ItemsControl.ItemContainerGenerator.ContainerFromItem() จะส่งกลับ null

ดังนั้นจึงควรมีวิธีบังคับให้ ItemContainerGenerator สร้างคอนเทนเนอร์สำหรับไอเท็ม

คำถามที่สมเหตุสมผลคือ: โหนดจะขยายและมองไม่เห็นได้อย่างไร

ง่าย! IsExpanded เชื่อมโยงกับคุณสมบัติของ VM และการจำลองเสมือนของ UI ทำงานตามที่คาดไว้:
เหตุการณ์ hanlder สำหรับ TreeViewItem.Expanded ถูกเรียกเมื่อดำเนินการเลื่อนไปยังรายการด้วยตนเอง


person Pavel Voronin    schedule 06.02.2013    source แหล่งที่มา


คำตอบ (1)


ฉันไม่สามารถรับประกันได้ว่าปัญหานี้จะคล้ายกันเพียงพอที่จะช่วยได้ แต่ฉันคิดว่าเนื่องจากฉันไม่สามารถหาคำตอบที่ดีสำหรับปัญหาของตัวเองได้ ฉันจึงจะโพสต์ที่นี่เนื่องจากสิ่งนี้คล้ายกัน และฉันพบวิธีแก้ไขปัญหาของฉันแล้ว

ฉันกำลังทำงานกับการควบคุม Canvas และมีองค์ประกอบ UI ที่ซับซ้อนซึ่งวางอยู่บนผืนผ้าใบนั้น และมีการควบคุม ItemsControl เป็นส่วนหนึ่งของคำจำกัดความ XAML UI ItemsControl's ได้กำหนด DataTemplates ไว้ใน ItemTemplates

ด้วยเหตุนี้ แง่มุมบางอย่างของออบเจ็กต์ของฉันจึงจะสร้างขึ้นอย่างสมบูรณ์เมื่อ Visual Tree ได้รับการอัปเดตแล้วเท่านั้น นี่ไม่ใช่ปัญหาเกี่ยวกับการลากและวางและการทำงานกับรายการในขณะที่กำลังทำงานบนแคนวาสเนื่องจาก ItemContainerGenerator ได้สร้างรายการแล้วเมื่อฉันต้องการ แต่เป็นปัญหาเมื่อพยายามสร้างรายการใหม่จากฐานข้อมูลในเวลาโหลด Canvas ก่อนที่แผนผังภาพจะดึงออกมาเอง

ฉันพบวิธีเดียวที่แท้จริงในการแก้ไขปัญหานี้คือการเริ่มต้นวาง "วัตถุรอง" บนผืนผ้าใบเท่านั้น (วัตถุที่ผูกเข้ากับวัตถุที่ ItemContainerGenerators สร้าง) เมื่อเหตุการณ์ LayoutUpdated สำหรับผืนผ้าใบ ถูกไล่ออก

public class DesignerCanvas : Canvas
{
  public void LoadCanvasFromDB()
  {
    ...
    [loading items from the database, part one]
    LayoutUpdated += DesignerCanvas_LayoutUpdated;
  }

  void DesignerCanvas_LayoutUpdated(object sender, EventArgs e)
  {
    LayoutUpdated -= DesignerCanvas_LayoutUpdated;
    [loading items from the database which tie to UI elements from part one]
person James Eby    schedule 06.04.2013