VisualTreeHelper.FindElementsInHostCoordinates Metode

Definisi

Overload

FindElementsInHostCoordinates(Point, UIElement)

Mengambil sekumpulan objek yang terletak dalam titik koordinat x-y tertentu dari UI aplikasi. Kumpulan objek mewakili komponen pohon visual yang berbagi titik tersebut.

FindElementsInHostCoordinates(Rect, UIElement)

Mengambil sekumpulan objek yang terletak dalam bingkai Rect tertentu dari antarmuka pengguna aplikasi. Sekumpulan objek mewakili komponen pohon visual yang berbagi area persegi panjang, dan mungkin menyertakan elemen yang overdraw.

FindElementsInHostCoordinates(Point, UIElement, Boolean)

Mengambil sekumpulan objek yang terletak dalam titik koordinat x-y tertentu dari UI aplikasi. Kumpulan objek mewakili komponen pohon visual yang berbagi titik tersebut.

FindElementsInHostCoordinates(Rect, UIElement, Boolean)

Mengambil sekumpulan objek yang terletak dalam bingkai Rect tertentu dari antarmuka pengguna aplikasi. Sekumpulan objek mewakili komponen pohon visual yang berbagi area persegi panjang, dan mungkin menyertakan elemen yang overdraw.

FindElementsInHostCoordinates(Point, UIElement)

Mengambil sekumpulan objek yang terletak dalam titik koordinat x-y tertentu dari UI aplikasi. Kumpulan objek mewakili komponen pohon visual yang berbagi titik tersebut.

public:
 static IIterable<UIElement ^> ^ FindElementsInHostCoordinates(Point intersectingPoint, UIElement ^ subtree);
/// [Windows.Foundation.Metadata.DefaultOverload]
/// [Windows.Foundation.Metadata.Overload("FindElementsInHostCoordinatesPoint")]
 static IIterable<UIElement> FindElementsInHostCoordinates(Point const& intersectingPoint, UIElement const& subtree);
[Windows.Foundation.Metadata.DefaultOverload]
[Windows.Foundation.Metadata.Overload("FindElementsInHostCoordinatesPoint")]
public static IEnumerable<UIElement> FindElementsInHostCoordinates(Point intersectingPoint, UIElement subtree);
function findElementsInHostCoordinates(intersectingPoint, subtree)
Public Shared Function FindElementsInHostCoordinates (intersectingPoint As Point, subtree As UIElement) As IEnumerable(Of UIElement)

Parameter

intersectingPoint
Point

Titik untuk digunakan sebagai titik penentuan. Titik ini menggunakan ruang koordinat jendela aplikasi, bukan elemen tertentu (dan bukan subtree jika ditentukan).

subtree
UIElement

Objek yang akan dicari. Jika objek subtree ada di kumpulan keseluruhan elemen yang ada pada koordinat intersectingPoint yang ditentukan, maka nilai yang dikembalikan hanya berisi objek subtree dan objek apa pun yang memiliki urutan z lebih tinggi daripada subtree, yang dicantumkan dengan inversi z-order. Jika objek subtree tidak ada di koordinat intersectingPoint , nilai yang dikembalikan akan kosong.

Mengembalikan

Sekumpulan objek UIElement yang dapat dijumlahkan dalam komposisi pohon visual pada titik yang ditentukan, yang dicantumkan dengan inversi urutan z.

Atribut

Contoh

Ini adalah contoh metode utilitas yang menentukan apakah elemen Nama tertentu ada di mana saja dalam urutan z di Titik di UI aplikasi.

private bool DoesPointContainElement(Point testPoint, string elementName, UIElement referenceFrame)
{
    IEnumerable<UIElement> elementStack = 
      VisualTreeHelper.FindElementsInHostCoordinates(testPoint, referenceFrame);
    foreach (UIElement item in elementStack)
    {
        FrameworkElement feItem = item as FrameworkElement; 
//cast to FrameworkElement, need the Name property
        if (feItem != null)
        {
            if (feItem.Name.Equals(elementName))
            {
                 return true;
            }
        }
     }
     // elementName was not in this stack 
     return false;
}

Keterangan

Nilai yang dikembalikan bukan elemen tunggal, ini adalah koleksi. Koleksi dapat memiliki lebih dari satu elemen karena mungkin ada beberapa elemen UI yang ditumpuk satu sama lain dalam urutan z. Teknik pengujian hit konvensional yang diekspos oleh penanganan aktivitas input, seperti nilai pengirim untuk peristiwa PointerPressed , hanya mempertangungjawabkan elemen paling atas yang memiliki urutan z tertinggi. Metode FindElementsInHostCoordinates mengembalikan seluruh tumpukan elemen yang berbagi titik atau area tersebut di UI aplikasi, yang dicantumkan dengan inversi urutan z. Dengan demikian, menggunakan FindElementsInHostCoordinates dapat berguna untuk memeriksa kasus di mana Anda sengaja atau tidak sengaja menumpuk elemen. Anda mungkin ingin memperbaiki pesanan untuk penyajian dan pengujian hit, atau memeriksa urutan tersebut karena alasan lain.

FindElementsInHostCoordinates berguna untuk tiga skenario: pengujian hit dasar, pengujian hit yang memfilter elemen tertentu, dan menentukan apakah ada elemen di pohon visual yang overdrawing pada titik yang sama.

Pengujian hit dasar

Untuk pengujian hit dasar, tujuannya adalah untuk menemukan elemen mana yang tertinggi dalam urutan z UI aplikasi pada titik tertentu dalam koordinat x-y. Selain menjadi elemen yang paling menarik di UI yang dirender, elemen ini juga penting karena merupakan sumber peristiwa yang dilaporkan jika ada interaksi pengguna seperti peristiwa pointer. Anda mungkin telah mencapai skenario pengujian di mana Anda ingin mengetahui elemen apa yang ada di urutan z teratas sebelum peristiwa input terjadi, sehingga Anda dapat mengantisipasinya dan mungkin memperbaiki kesalahan apa pun dalam penempatan z-order.

Untuk skenario ini, Anda harus melewati titik yang Anda minati dalam pengujian klik sebagai nilai parameter intersectingPoint . Untuk parameter subtree , Anda dapat meneruskannya sebagai null. Atau Anda dapat menentukan subtree untuk menjadi beberapa elemen yang Anda tahu adalah visual akar halaman, atau sebaliknya adalah beberapa elemen yang Anda inginkan untuk menjadi perhentian terakhir untuk pengujian hit.

Elemen yang paling atas dalam urutan z selalu merupakan elemen pertama dalam IEnumerable item UIElement yang dikembalikan. Jadi untuk pengujian hit dasar, Anda biasanya hanya tertarik pada item pertama itu. Setiap item tambahan dalam IEnumerable adalah elemen lain yang juga pada saat itu tetapi lebih jauh kembali dalam urutan z dan menggambar di bawah item pertama itu. Elemen lebih jauh ke belakang tidak akan melaporkan diri mereka sendiri sebagai sumber untuk peristiwa input pada saat itu, hanya elemen paling atas yang akan.

Pengujian hit yang difilter elemen

Terkadang Anda ingin tahu apakah elemen tertentu ada pada titik tertentu di UI. Jika demikian, Anda dapat menentukan titik tersebut untuk intersectingPoint dan menentukan elemen yang Anda cari sebagai parameter subtree . Jika nilai yang dikembalikan tidak kosong, itu berarti bahwa elemen memang ada pada saat itu di UI. Jika elemen adalah item pertama dalam nilai yang dikembalikan, itu berarti elemen paling atas dalam urutan z di intersectingPoint. Jika ada item lain dalam nilai pengembalian dan subtree bukan yang pertama, item lain mewakili elemen yang dirender di intersectingPoint yang lebih tinggi dalam urutan z (secara visual, ini merender di atas elemen subtree ). Dalam hal ini subtree adalah elemen terakhir dalam IEnumerable yang dikembalikan, bukan yang pertama.

Jika nilai yang dikembalikan kosong, itu berarti bahwa elemen subtree tidak ada di sana, pada nilai z-order apa pun.

Mencari overdraw atau melihat pohon visual lengkap

UI bisa dinamis, terutama jika Anda menggunakan koleksi dari pengikatan data untuk populasi UI. Jadi kadang-kadang ada kebutuhan untuk mengetahui elemen mana yang saat ini berada di atas. Anda mungkin mengantisipasi titik di aplikasi tempat pengguna dapat berinteraksi dan memverifikasi bahwa interaksi yang Anda inginkan saat ini dimungkinkan. Untuk skenario ini, Anda biasanya menentukan nilai Titik yang mewakili beberapa titik yang diketahui seperti (0,0) yang saat ini merupakan koordinat valid yang ada di dalam jendela aplikasi Anda. Untuk parameter subtree , Anda dapat meneruskannya sebagai null. Atau Anda dapat menentukan subtree untuk menjadi beberapa elemen yang Anda tahu adalah visual akar halaman, atau sebaliknya adalah beberapa elemen yang Anda inginkan untuk menjadi perhentian terakhir untuk pengujian hit.

Catatan

Jika Anda meneruskan null untuk subtree, Anda mungkin melihat bahwa pohon visual berisi elemen yang tidak ditentukan oleh XAML tingkat halaman, seperti elemen Frame dan ContentPresenter. Ini berasal dari kode inisialisasi aplikasi umum yang ada di sebagian besar templat proyek Microsoft Visual Studio untuk aplikasi UWP, yang pertama kali membuat Bingkai menjadi nilai Window.Content . Pohon visual seperti yang ditunjukkan oleh metode FindElementsInHostCoordinates memperluas semua cara ke Window.Content kecuali Anda memfilternya dengan elemen subtree seperti akar Halaman .

Dalam nilai yang dikembalikan, Anda mungkin tertarik pada setiap item di dalamnya. Jadi Anda dapat menggunakan foreach atau teknik khusus bahasa serupa untuk mengulangi koleksi dan menjalankan logika Anda sendiri pada masing-masing elemen ini. Ingatlah bahwa elemen pertama dalam koleksi itu adalah elemen yang paling atas dalam z-order.

Jika Anda memprogram menggunakan C# atau Microsoft Visual Basic, jenis nilai yang dikembalikan dari metode ini diproyeksikan sebagai koleksi generik IEnumerable yang berisi item UIElement . Jika Anda memprogram menggunakan ekstensi komponen Visual C++ (C++/CX), jenis pengembalian metode ini adalah UIElement yang dapat<diubah.>

Lihat juga

Berlaku untuk

FindElementsInHostCoordinates(Rect, UIElement)

Mengambil sekumpulan objek yang terletak dalam bingkai Rect tertentu dari UI aplikasi. Kumpulan objek mewakili komponen pohon visual yang berbagi area persegi panjang, dan mungkin menyertakan elemen yang terlalu menguras.

public:
 static IIterable<UIElement ^> ^ FindElementsInHostCoordinates(Rect intersectingRect, UIElement ^ subtree);
/// [Windows.Foundation.Metadata.Overload("FindElementsInHostCoordinatesRect")]
 static IIterable<UIElement> FindElementsInHostCoordinates(Rect const& intersectingRect, UIElement const& subtree);
[Windows.Foundation.Metadata.Overload("FindElementsInHostCoordinatesRect")]
public static IEnumerable<UIElement> FindElementsInHostCoordinates(Rect intersectingRect, UIElement subtree);
function findElementsInHostCoordinates(intersectingRect, subtree)
Public Shared Function FindElementsInHostCoordinates (intersectingRect As Rect, subtree As UIElement) As IEnumerable(Of UIElement)

Parameter

intersectingRect
Rect

Rect untuk digunakan sebagai area penentuan. Bingkai ini menggunakan ruang koordinat jendela aplikasi, bukan dari elemen tertentu (dan bukan subtree jika ditentukan).

subtree
UIElement

Objek yang akan dicari. Jika objek subtree ada di kumpulan keseluruhan elemen yang ada dalam intersectingRect yang ditentukan, maka nilai yang dikembalikan hanya berisi objek subtree dan elemen yang menggambar di atas ruangnya. Jika objek subtree tidak ada dalam bingkai intersectingRect , nilai yang dikembalikan akan kosong.

Mengembalikan

Sekumpulan objek UIElement yang dapat dijumlahkan yang berada dalam komposisi pohon visual dalam bingkai Rect yang ditentukan.

Atribut

Contoh

Mengingat UI XAML ini:

<Canvas Name="canvas">
  <Rectangle Name="outermost" Fill="Red" Width="200" Height="200"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="hidden" Fill="Green" Width="120" Height="120"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="shown" Fill="Orange" Width="120" Height="120"/>
  <Rectangle Canvas.Left="80" Canvas.Top="80" Name="center" Fill="Yellow" Width="40" Height="40"/>
  <Rectangle Canvas.Left="190" Canvas.Top="190" Name="bottomright" Fill="Pink" Width="10" Height="10"/>
</Canvas>

Berikut adalah beberapa contoh penggunaan dan hasil dari FindElementsInHostCoordinates, menggunakan nilai subtree yang berbeda:

private void Test(object sender, RoutedEventArgs e)
{
    IEnumerable<UIElement> hits;
    hits =  VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), canvas);
    foreach (UIElement element in hits)
    {
        //run logic here, such as log the results 
    }
// results in the following set of elements, listed by Name:
// center - the last declared XAML element is first returned, if within the area
// shown - renders, underneath 'center' in part of the area but visible on the edges
// hidden - entirely under 'shown', not visible but part of the area, an overdraw
// outermost - draws under all the above
// canvas - the 'subtree' value, and the last element reported

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), center);
    foreach (UIElement element in hits) {
        //run logic here, such as log the results
    }
// results in only 'center', because it was 'subtree' and it's also topmost

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), bottomright);
// results in an empty set, 'bottomright' isn't in the specified rect
}

Keterangan

Nilai yang dikembalikan bukan elemen tunggal, ini adalah koleksi. Koleksi dapat memiliki lebih dari satu elemen karena mungkin ada beberapa elemen UI yang ditumpuk satu sama lain dalam urutan z, dan juga beberapa elemen sepenuhnya atau sebagian dalam bingkai intersectingRect . Teknik pengujian hit konvensional yang diekspos oleh penanganan aktivitas input, seperti nilai pengirim untuk peristiwa PointerPressed , hanya mempertangungjawabkan elemen paling atas yang memiliki urutan z tertinggi. Metode FindElementsInHostCoordinates mengembalikan seluruh tumpukan elemen yang berbagi titik atau area tersebut di UI aplikasi, yang dicantumkan berdasarkan urutan pohon visual (yang biasanya sama dengan inversi urutan deklarasi XAML). Dengan demikian, menggunakan FindElementsInHostCoordinates dapat berguna untuk memeriksa kasus di mana Anda sengaja atau tidak sengaja menumpuk elemen. Anda mungkin ingin memperbaiki pesanan untuk penyajian dan pengujian hit, atau memeriksa urutan tersebut karena alasan lain.

FindElementsInHostCoordinates di atas area berguna untuk dua skenario: pengujian hit dasar dan pengujian hit yang memfilter elemen tertentu.

Pengujian hit dasar

Untuk pengujian hit dasar, tujuannya adalah untuk menemukan elemen mana yang tertinggi dalam urutan z UI aplikasi. Jika Anda menekan-pengujian untuk interaksi mouse, Anda mungkin menggunakan titik, tetapi untuk pengujian hit berorientasi sentuhan sering kali sesuai untuk menggunakan area persegi panjang. Anda mungkin telah mencapai skenario pengujian di mana Anda ingin mengetahui elemen apa yang ada di urutan z teratas sebelum peristiwa sentuhan terjadi. Atau Anda mungkin memiliki titik yang ingin Anda perluas menjadi persegi panjang untuk melihat apa yang ada di dekat titik tengah dan elemen mana yang mungkin menjadi target yang dimaksudkan.

Untuk skenario ini, Anda harus melewati persegi panjang yang Anda minati dalam pengujian temuan sebagai nilai parameter intersectingRect . Untuk parameter subtree , Anda dapat meneruskannya sebagai null. Atau Anda dapat menentukan subtree untuk menjadi beberapa elemen yang Anda tahu adalah visual akar halaman, atau sebaliknya adalah beberapa elemen yang Anda inginkan untuk menjadi perhentian terakhir untuk pengujian hit.

Urutan elemen dalam IEnumerable yang dikembalikan dari item UIElement mempertanggungjawabkan ruang koordinat di area dan untuk urutan z. Jadi dimungkinkan untuk mendapatkan temuan untuk item yang tidak berada pada urutan z tertinggi dan karenanya tidak dapat menjadi sumber peristiwa input. Untuk memastikan, Anda dapat melakukan pengujian hit yang difilter elemen untuk item apa pun dari daftar yang dikembalikan yang Anda minati, menggunakan intersectingRect yang sama tetapi meneruskan elemen yang menarik sebagai subtree.

Pengujian hit yang difilter elemen

Terkadang Anda ingin tahu apakah elemen tertentu ada dalam area UI. Jika demikian, Anda dapat menentukan area tersebut untuk intersectingRect dan menentukan elemen yang Anda cari sebagai parameter subtree . Jika nilai yang dikembalikan tidak kosong, itu berarti bahwa elemen ada di suatu tempat di area tersebut. Saat Anda menguji area, urutan dalam set pengembalian tidak berguna untuk menentukan urutan z karena set menyertakan elemen pada lebih dari satu koordinat x-y. Set ini memiliki campuran elemen yang menggambar berbagai koordinat x-y dan juga elemen yang mungkin overdrawn sepenuhnya atau sebagian. Untuk benar-benar memeriksa situasi overdraw, gunakan kelebihan beban FindElementsInHostCoordinates yang menggunakan Point, sehingga koordinat x-y dan urutan pohon visual tidak lagi menjadi faktor. Lihat FindElementsInHostCoordinates(Point,UIElement).

Jika nilai yang dikembalikan kosong, itu berarti bahwa elemen subtree tidak ada di area tersebut.

Jika Anda memprogram menggunakan C# atau Microsoft Visual Basic, jenis nilai yang dikembalikan dari metode ini diproyeksikan sebagai koleksi generik IEnumerable yang berisi item UIElement . Jika Anda memprogram menggunakan ekstensi komponen Visual C++ (C++/CX), jenis pengembalian metode ini adalah UIElement IIterable<>.

Lihat juga

Berlaku untuk

FindElementsInHostCoordinates(Point, UIElement, Boolean)

Mengambil sekumpulan objek yang terletak dalam titik koordinat x-y tertentu dari antarmuka pengguna aplikasi. Kumpulan objek mewakili komponen pohon visual yang berbagi titik tersebut.

public:
 static IIterable<UIElement ^> ^ FindElementsInHostCoordinates(Point intersectingPoint, UIElement ^ subtree, bool includeAllElements);
/// [Windows.Foundation.Metadata.DefaultOverload]
/// [Windows.Foundation.Metadata.Overload("FindAllElementsInHostCoordinatesPoint")]
 static IIterable<UIElement> FindElementsInHostCoordinates(Point const& intersectingPoint, UIElement const& subtree, bool const& includeAllElements);
[Windows.Foundation.Metadata.DefaultOverload]
[Windows.Foundation.Metadata.Overload("FindAllElementsInHostCoordinatesPoint")]
public static IEnumerable<UIElement> FindElementsInHostCoordinates(Point intersectingPoint, UIElement subtree, bool includeAllElements);
function findElementsInHostCoordinates(intersectingPoint, subtree, includeAllElements)
Public Shared Function FindElementsInHostCoordinates (intersectingPoint As Point, subtree As UIElement, includeAllElements As Boolean) As IEnumerable(Of UIElement)

Parameter

intersectingPoint
Point

Titik yang akan digunakan sebagai titik penentuan. Titik ini menggunakan ruang koordinat jendela aplikasi, bukan elemen tertentu (dan bukan subtree jika ditentukan).

subtree
UIElement

Objek yang akan dicari. Jika objek subtree ada di kumpulan keseluruhan elemen yang ada pada koordinat intersectingPoint yang ditentukan, maka nilai yang dikembalikan hanya berisi objek subtree dan objek apa pun yang memiliki urutan z lebih tinggi daripada subtree, yang tercantum dengan inversi urutan z. Jika objek subtree tidak ada di koordinat intersectingPoint , nilai yang dikembalikan akan kosong.

includeAllElements
Boolean

bool

true untuk menyertakan semua elemen yang bersinggungan, termasuk elemen-elemen yang dianggap tidak terlihat untuk mencapai pengujian. false untuk menemukan hanya elemen yang terlihat dan dapat diuji hit. Defaultnya adalah false.

Mengembalikan

Sekumpulan objek UIElement yang dapat dijumlahkan yang ditentukan untuk ditempatkan dalam komposisi pohon visual pada titik yang ditentukan, yang dicantumkan dengan inversi urutan z.

Atribut

Contoh

Mengingat UI XAML ini:

<Canvas Name="canvas">
  <Rectangle Name="outermost" Fill="Red" Width="200" Height="200"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="hidden" Fill="Green" Width="120" Height="120"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="shown" Fill="Orange" Width="120" Height="120"/>
  <Rectangle Canvas.Left="80" Canvas.Top="80" Name="center" Fill="Yellow" Width="40" Height="40"/>
  <Rectangle Canvas.Left="190" Canvas.Top="190" Name="bottomright" Fill="Pink" Width="10" Height="10"/>
</Canvas>

Berikut adalah beberapa contoh penggunaan dan hasil dari FindElementsInHostCoordinates, menggunakan nilai subtree yang berbeda:

private void Test(object sender, RoutedEventArgs e)
{
    IEnumerable<UIElement> hits;
    hits =  VisualTreeHelper.FindElementsInHostCoordinates(
      new Point(100,100), canvas, true);
    foreach (UIElement element in hits)
    {
        //run logic here, such as log the results 
    }
// results in the following set of elements, listed by Name:
// center - the element that is topmost in z-order at 100,100
// shown - also renders at 100,100 but is underneath 'center'
// hidden - is entirely underneath 'shown', 
//   and lower in z-order because 'hidden' declared before 'shown' in XAML
// outermost - draws under all the above at 100,100
// canvas - the 'subtree' value, so that's the last element reported

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Point(100, 100), center, true);
    foreach (UIElement element in hits) {
        //run logic here, such as log the results
    }
// results in 'center', because it is 'subtree' and also topmost

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Point(100, 100), bottomright, true);
// results in an empty set, 'bottomright' doesn't render at 100,100
}

Keterangan

Elemen dianggap dapat diuji hit jika keduanya menempati ruang dalam tata letak dan "menghasilkan tinta". Untuk elemen yang memiliki Brush, Brush non-null dianggap sebagai sesuatu yang menghasilkan tinta, bahkan jika Brush tidak menghasilkan piksel yang terlihat. Misalnya, SolidColorBrush dengan warnanya diatur ke Transparan masih menghasilkan tinta. Hanya kuas null yang tidak menghasilkan tinta. Properti Opasitas tidak dipertimbangkan. Elemen ini masih menghasilkan tinta bahkan jika Opacity adalah 0.

Ketika parameter includeAllElements diatur ke true, elemen yang tidak menghasilkan tinta dipertimbangkan untuk pengujian temuan. Dalam hal ini, selama elemen memenuhi persyaratan spasial (titik bersinggungan dengan batas elemen), maka itu dan leluhurnya disertakan dalam hasilnya.

Catatan

Beberapa elemen khusus, seperti SwapChainPanel dan MediaElement, tidak memiliki kuas tetapi masih dapat menghasilkan tinta.

Lihat juga

Berlaku untuk

FindElementsInHostCoordinates(Rect, UIElement, Boolean)

Mengambil sekumpulan objek yang terletak dalam bingkai Rect tertentu dari UI aplikasi. Kumpulan objek mewakili komponen pohon visual yang berbagi area persegi panjang, dan mungkin menyertakan elemen yang terlalu menguras.

public:
 static IIterable<UIElement ^> ^ FindElementsInHostCoordinates(Rect intersectingRect, UIElement ^ subtree, bool includeAllElements);
/// [Windows.Foundation.Metadata.Overload("FindAllElementsInHostCoordinatesRect")]
 static IIterable<UIElement> FindElementsInHostCoordinates(Rect const& intersectingRect, UIElement const& subtree, bool const& includeAllElements);
[Windows.Foundation.Metadata.Overload("FindAllElementsInHostCoordinatesRect")]
public static IEnumerable<UIElement> FindElementsInHostCoordinates(Rect intersectingRect, UIElement subtree, bool includeAllElements);
function findElementsInHostCoordinates(intersectingRect, subtree, includeAllElements)
Public Shared Function FindElementsInHostCoordinates (intersectingRect As Rect, subtree As UIElement, includeAllElements As Boolean) As IEnumerable(Of UIElement)

Parameter

intersectingRect
Rect

Rect untuk digunakan sebagai area penentuan. Bingkai ini menggunakan ruang koordinat jendela aplikasi, bukan elemen tertentu (dan bukan subtree jika ditentukan).

subtree
UIElement

Objek yang akan dicari. Jika objek subtree ada di kumpulan keseluruhan elemen yang ada dalam intersectingRect yang ditentukan, maka nilai yang dikembalikan hanya berisi objek subtree dan elemen yang menggambar di atas ruangnya. Jika objek subtree tidak ada dalam bingkai intersectingRect , nilai yang dikembalikan akan kosong.

includeAllElements
Boolean

bool

true untuk menyertakan semua elemen yang bersinggungan, termasuk elemen-elemen yang dianggap tidak terlihat untuk mencapai pengujian. false untuk menemukan hanya elemen yang terlihat dan dapat diuji hit. Defaultnya adalah false.

Mengembalikan

Sekumpulan objek UIElement yang dapat dijumlahkan yang ditentukan untuk ditempatkan dalam komposisi pohon visual dalam bingkai Rect yang ditentukan.

Atribut

Contoh

Mengingat UI XAML ini:

<Canvas Name="canvas">
  <Rectangle Name="outermost" Fill="Red" Width="200" Height="200"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="hidden" Fill="Green" Width="120" Height="120"/>
  <Rectangle Canvas.Left="40" Canvas.Top="40" Name="shown" Fill="Orange" Width="120" Height="120"/>
  <Rectangle Canvas.Left="80" Canvas.Top="80" Name="center" Fill="Yellow" Width="40" Height="40"/>
  <Rectangle Canvas.Left="190" Canvas.Top="190" Name="bottomright" Fill="Pink" Width="10" Height="10"/>
</Canvas>

Berikut adalah beberapa contoh penggunaan dan hasil dari FindElementsInHostCoordinates, menggunakan nilai subtree yang berbeda:

private void Test(object sender, RoutedEventArgs e)
{
    IEnumerable<UIElement> hits;
    hits =  VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), canvas, true);
    foreach (UIElement element in hits)
    {
        //run logic here, such as log the results 
    }
// results in the following set of elements, listed by Name:
// center - the last declared XAML element is first returned, if within the area
// shown - renders, underneath 'center' in part of the area but visible on the edges
// hidden - entirely under 'shown', not visible but part of the area, an overdraw
// outermost - draws under all the above
// canvas - the 'subtree' value, and the last element reported

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), center, true);
    foreach (UIElement element in hits) {
        //run logic here, such as log the results
    }
// results in only 'center', because it was 'subtree' and it's also topmost

    hits = VisualTreeHelper.FindElementsInHostCoordinates(
      new Rect(75,75,50,50), bottomright, true);
// results in an empty set, 'bottomright' isn't in the specified rect
}

Keterangan

Elemen dianggap dapat diuji hit jika keduanya menempati ruang dalam tata letak dan "menghasilkan tinta". Untuk elemen yang memiliki Brush, Brush non-null dianggap sebagai sesuatu yang menghasilkan tinta, bahkan jika Brush tidak menghasilkan piksel yang terlihat. Misalnya, SolidColorBrush dengan warnanya diatur ke Transparan masih menghasilkan tinta. Hanya kuas null yang tidak menghasilkan tinta. Properti Opasitas tidak dipertimbangkan. Elemen ini masih menghasilkan tinta bahkan jika Opacity adalah 0.

Ketika parameter includeAllElements diatur ke true, elemen yang tidak menghasilkan tinta dipertimbangkan untuk pengujian temuan. Dalam hal ini, selama elemen memenuhi persyaratan spasial (rect berpotongan batas elemen), maka itu dan leluhurnya termasuk dalam hasil.

Catatan

Beberapa elemen khusus, seperti SwapChainPanel dan MediaElement, tidak memiliki kuas tetapi masih dapat menghasilkan tinta.

Lihat juga

Berlaku untuk