Cara mendapatkan item pohon logis yang berisi objek templat data

Saya memiliki objek bernama "TextModel". Saya mendefinisikan HierarchicalDataTemplate untuk itu.

seperti ini:

<HierarchicalDataTemplate DataType="{x:Type local:TextModel}"
                          ItemsSource="{Binding Children}">
  <TextBlock x:Name="TextPresenter"
             Text="{Binding Text}"
             Style="{StaticResource TextModelStyleMouseOver}" />
</HierarchicalDataTemplate>

TextModel ini terdapat di setiap TreeViewItem di TreeView saya. Dan, di belakang kode saya menggunakan VisualTreeHelper.HitTest untuk mendapatkan TreeViewItem yang saya klik, tetapi itu tidak memberi saya TreeViewItem sebagai salah satu hasil HitTest. Hasil HitTest adalah: TextBlock (dan Border, Grid dan ScrollViewer) - yang dari HierarchicalDataTemplate yang saya tetapkan.

Saya sudah mencoba menggunakan LogicalTreeHelper.GetParent(textBlockFromTheHitTestResults) tetapi hasilnya nol.

Terima kasih atas perhatian Anda!


person Yanko Pata    schedule 23.01.2013    source sumber


Jawaban (1)


HitTest memiliki kelebihan yang dapat Anda gunakan untuk memfilter hasil:

VisualTreeHelper.HitTest(
    root,
    o => o is TreeViewItem ? HitTestFilterBehavior.ContinueSkipChildren : HitTestFilterBehavior.Continue,
    r =>
        {
            if (r.VisualHit is TreeViewItem)
            {
                DoSomethingWithTreeViewItem((TreeViewItem)r.VisualHit);
                return HitTestResultBehavior.Stop;
            }

            return HitTestResultBehavior.Continue;
        },
    new PointHitTestParameters(point));
person Kent Boogaart    schedule 23.01.2013
comment
R.VisualHit-s yang dikembalikan sama seperti yang saya sebutkan sebelumnya: TextBlock, dan Border, Grid dan ScrollViewer. Namun ada yang menarik - o justru menemukan TreeViewItem, namun kemudian HitTestResultCallback dipanggil dengan r yaitu Grid (salah satu hasil hit test yang ditulis di atas). Jadi yang saya lakukan adalah mengambil o yang ditemukan sebagai TreeViewItem dan menyimpannya dalam variabel lokal yang akan menjadi nilai yang dikembalikan dari metode pembungkusan kode yang Anda berikan kepada saya. - person Yanko Pata; 23.01.2013