VisualTreeHelper.FindElementsInHostCoordinates Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Überlädt
| Name | Beschreibung |
|---|---|
| FindElementsInHostCoordinates(Point, UIElement) |
Ruft einen Satz von Objekten ab, die sich innerhalb eines angegebenen x-y-Koordinatenpunkts einer App-UI befinden. Der Satz von Objekten stellt die Komponenten einer visuellen Struktur dar, die diesen Punkt gemeinsam nutzen. |
| FindElementsInHostCoordinates(Rect, UIElement) |
Ruft einen Satz von Objekten ab, die sich in einem angegebenen Rect-Frame einer App-UI befinden. Der Satz von Objekten stellt die Komponenten einer visuellen Struktur dar, die einen rechteckigen Bereich gemeinsam nutzen, und kann Elemente enthalten, die überdraniert werden. |
| FindElementsInHostCoordinates(Point, UIElement, Boolean) |
Ruft einen Satz von Objekten ab, die sich innerhalb eines angegebenen x-y-Koordinatenpunkts einer App-UI befinden. Der Satz von Objekten stellt die Komponenten einer visuellen Struktur dar, die diesen Punkt gemeinsam nutzen. |
| FindElementsInHostCoordinates(Rect, UIElement, Boolean) |
Ruft einen Satz von Objekten ab, die sich in einem angegebenen Rect-Frame einer App-UI befinden. Der Satz von Objekten stellt die Komponenten einer visuellen Struktur dar, die einen rechteckigen Bereich gemeinsam nutzen, und kann Elemente enthalten, die überdraniert werden. |
FindElementsInHostCoordinates(Point, UIElement)
Ruft einen Satz von Objekten ab, die sich innerhalb eines angegebenen x-y-Koordinatenpunkts einer App-UI befinden. Der Satz von Objekten stellt die Komponenten einer visuellen Struktur dar, die diesen Punkt gemeinsam nutzen.
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
Der Punkt, der als Bestimmungspunkt verwendet werden soll. Dieser Punkt verwendet den Koordinatenbereich des App-Fensters, nicht eines bestimmten Elements (und nicht der Unterstruktur , sofern angegeben).
- subtree
- UIElement
Ein Objekt, nach dem gesucht werden soll. Wenn das Unterstrukturobjekt in der Gesamtmenge der Elemente vorhanden ist, die an den angegebenen intersectingPoint-Koordinaten vorhanden sind, enthält der Rückgabewert nur das Unterstrukturobjekt und alle Objekte, die eine höhere Z-Reihenfolge aufweisen als unterstruktur, aufgelistet durch Umgekehrte der Z-Reihenfolge. Wenn das Unterstrukturobjekt bei intersectingPoint-Koordinaten nicht vorhanden ist, ist der Rückgabewert leer.
Gibt zurück
Ein aufzählbarer Satz von UIElement-Objekten in der visuellen Strukturkomposition am angegebenen Punkt, aufgelistet durch Umkehrung der Z-Reihenfolge.
- Attribute
Beispiele
Dies ist eine Beispiel-Hilfsmethode, die bestimmt, ob ein Element eines bestimmten Namens an einer beliebigen Stelle in der Z-Reihenfolge an einem Punkt in der Benutzeroberfläche einer App vorhanden ist.
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;
}
Hinweise
Der Rückgabewert ist kein einzelnes Element, es handelt sich um eine Auflistung. Die Auflistung kann mehrere Elemente enthalten, da mehrere UI-Elemente in einer Z-Reihenfolge übereinander gestapelt werden können. Die herkömmlichen Treffertests, die von den Eingabeereignishandlern verfügbar gemacht werden, z. B. der Absenderwert für ein PointerPressed-Ereignis , weisen nur das oberste Element auf, das die höchste Z-Reihenfolge aufweist. FindElementsInHostCoordinates-Methoden geben den gesamten Stapel von Elementen zurück, die diesen Punkt oder Bereich in der App-Benutzeroberfläche teilen, aufgelistet durch Umgekehrte der Z-Reihenfolge. Die Verwendung von FindElementsInHostCoordinates kann daher hilfreich sein, um Fälle zu untersuchen, in denen Sie absichtlich oder unbeabsichtigt gestapelte Elemente haben. Möglicherweise möchten Sie die Reihenfolge für das Rendern und Treffertests korrigieren oder diese Reihenfolge aus anderen Gründen untersuchen.
FindElementsInHostCoordinates ist für drei Szenarien nützlich: grundlegende Treffertests, Treffertests, die nach einem bestimmten Element filtern, und bestimmen, ob Elemente in einer visuellen Struktur vorhanden sind, die an demselben Punkt übergezeichnet werden.
Grundlegende Treffertests
Für grundlegende Treffertests besteht das Ziel darin, zu ermitteln, welches Element in der Z-Reihenfolge einer App-UI an einem bestimmten Punkt in x-y-Koordinaten am höchsten ist. Neben dem Element, das ganz oben in der gerenderten Benutzeroberfläche zeichnet, ist dieses Element auch wichtig, da es sich um die gemeldete Ereignisquelle handelt, wenn Benutzerinteraktionen wie Zeigerereignisse vorhanden sind. Möglicherweise haben Sie Testszenarien getroffen, in denen Sie wissen möchten, welches Element in der obersten Z-Reihenfolge vorhanden ist, bevor ein Eingabeereignis stattfindet, damit Sie es antizipieren und möglicherweise Fehler in der Z-Reihenfolge-Platzierung korrigieren können.
In diesem Szenario sollten Sie den Punkt übergeben, an dem Sie für Treffertests interessiert sind, als Wert des intersectingPoint-Parameters . Für den Parameter "Subtree " können Sie ihn als NULL übergeben. Oder Sie können eine Unterstruktur angeben, die ein Element sein soll, das Ihnen bekannt ist, das Stammelement einer Seite ist, oder ein Element, das sie zum endgültigen Stopp für Treffertests machen möchten.
Das Element, das sich ganz oben in der Z-Reihenfolge befindet, ist immer das erste Element im zurückgegebenen IEnumerable von UIElement-Elementen . Für grundlegende Treffertests interessieren Sie sich in der Regel nur für dieses erste Element. Alle zusätzlichen Elemente in der IEnumerable sind andere Elemente, die sich ebenfalls an diesem Punkt befinden, sich aber weiter zurück in der Z-Reihenfolge befinden und unterhalb dieses ersten Elements zeichnen. Die Elemente weiter hinten würden sich nicht selbst als Quelle für ein Eingabeereignis an diesem Punkt melden, nur das oberste Element würde.
Treffertests mit Elementfiltern
Manchmal möchten Sie wissen, ob ein bestimmtes Element an einem bestimmten Punkt in der Benutzeroberfläche vorhanden ist. Wenn ja, können Sie diesen Punkt für intersectingPoint angeben und das Element angeben, das Sie als Unterstrukturparameter suchen. Wenn der Rückgabewert nicht leer ist, bedeutet dies, dass das Element an diesem Punkt in der Benutzeroberfläche vorhanden ist. Wenn es sich bei dem Element um das erste Element im Rückgabewert handelt, bedeutet dies, dass das Element in der Z-Reihenfolge bei überschneidenden Punkt ganz oben liegt. Wenn es andere Elemente im Rückgabewert gibt und die Unterstruktur nicht zuerst vorhanden ist, stellen die anderen Elemente die Elemente dar, die in intersectingPoint gerendert werden, die in z-Reihenfolge höher sind (visuell werden diese über dem Unterstrukturelement gerendert). In diesem Fall ist Unterstruktur das letzte Element in der zurückgegebenen IEnumerable und nicht die erste.
Wenn der Rückgabewert leer ist, bedeutet dies, dass das Unterstrukturelement dort nicht vorhanden war, bei einem beliebigen Z-Order-Wert.
Suchen nach Überzeichnung oder Blick auf die vollständige visuelle Struktur
Eine Benutzeroberfläche kann dynamisch sein, insbesondere wenn Sie Sammlungen aus der Datenbindung für die Benutzeroberflächenpopulation verwenden. Es ist also gelegentlich erforderlich, zu wissen, welches Element aktuell im Vordergrund ist. Möglicherweise erwarten Sie Punkte in der App, an denen der Benutzer interagiert und überprüft, ob die beabsichtigten Interaktionen derzeit möglich sind. In diesem Szenario geben Sie in der Regel einen Punktwert an, der einen bekannten Punkt darstellt, z. B. (0,0), der derzeit eine gültige Koordinate im App-Fenster darstellt. Für den Parameter "Subtree " können Sie ihn als NULL übergeben. Oder Sie können eine Unterstruktur angeben, die ein Element sein soll, das Ihnen bekannt ist, das Stammelement einer Seite ist, oder es handelt sich sonst um ein Element, das der endgültige Stopp für Treffertests sein soll.
Hinweis
Wenn Sie null für die Unterstruktur übergeben, sehen Sie möglicherweise, dass die visuelle Struktur Elemente enthält, die nicht durch XAML auf Seitenebene definiert sind, z. B. ein Frame-Element und ContentPresenter. Diese stammen aus dem typischen App-Initialisierungscode, der in den meisten Microsoft Visual Studio Projektvorlagen für eine UWP-App vorhanden ist, wodurch zuerst der Frame als Window.Content-Wert erstellt wird. Die visuelle Struktur, wie von FindElementsInHostCoordinates-Methoden dargestellt, wird bis " Window.Content" erweitert, es sei denn, Sie filtern sie anderweitig mit einem Unterstrukturelement , z. B. einem Seitenstamm .
Im Rückgabewert sind Sie möglicherweise an den einzelnen Elementen interessiert. Sie können also foreach oder ähnliche sprachspezifische Techniken verwenden, um die Sammlung zu durchlaufen und Ihre eigene Logik für jedes dieser Elemente auszuführen. Denken Sie daran, dass das erste Element in dieser Auflistung die oberste in Z-Reihenfolge ist.
Wenn Sie mit C# programmieren, wird der Rückgabewerttyp dieser Methode als generische IEnumerable-Auflistung projiziert, die UIElement-Elemente enthält. Wenn Sie mit C++ programmieren, ist der Rückgabetyp dieser Methode IIterable<UIElement>.
Weitere Informationen
Gilt für:
FindElementsInHostCoordinates(Rect, UIElement)
Ruft einen Satz von Objekten ab, die sich in einem angegebenen Rect-Frame einer App-UI befinden. Der Satz von Objekten stellt die Komponenten einer visuellen Struktur dar, die einen rechteckigen Bereich gemeinsam nutzen, und kann Elemente enthalten, die überdraniert werden.
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
Das Rect , das als Bestimmungsbereich verwendet werden soll. Dieser Frame verwendet den Koordinatenbereich des App-Fensters, nicht eines bestimmten Elements (und nicht der Unterstruktur , falls angegeben).
- subtree
- UIElement
Ein Objekt, nach dem gesucht werden soll. Wenn das Unterstrukturobjekt in der Gesamtmenge der Elemente vorhanden ist, die innerhalb des angegebenen IntersectingRect vorhanden sind, enthält der Rückgabewert nur das Unterstrukturobjekt und Die Elemente, die über dem Bereich gezeichnet werden. Wenn das Unterstrukturobjekt nicht innerhalb des intersectingRect-Frames vorhanden ist, ist der Rückgabewert leer.
Gibt zurück
Ein aufzählbarer Satz von UIElement-Objekten , die sich in der visuellen Strukturkomposition im angegebenen Rect-Frame befinden.
- Attribute
Beispiele
Aufgrund dieser XAML-Benutzeroberfläche:
<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>
Hier sind einige Beispielverwendungen und Ergebnisse von FindElementsInHostCoordinates, wobei verschiedene Unterstrukturwerte verwendet werden:
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
}
Hinweise
Der Rückgabewert ist kein einzelnes Element, es handelt sich um eine Auflistung. Die Auflistung kann mehrere Elemente enthalten, da mehrere UI-Elemente in einer Z-Reihenfolge und auch mehrere Elemente vollständig oder teilweise im intersectingRect-Frame übereinander gestapelt werden können. Die herkömmlichen Treffertests, die von den Eingabeereignishandlern verfügbar gemacht werden, z. B. der Absenderwert für ein PointerPressed-Ereignis , weisen nur das oberste Element auf, das die höchste Z-Reihenfolge aufweist. FindElementsInHostCoordinates-Methoden geben den gesamten Stapel von Elementen zurück, die diesen Punkt oder Bereich in der App-Benutzeroberfläche teilen, aufgelistet nach visueller Strukturreihenfolge (normalerweise identisch mit umgekehrter XAML-Deklarationsreihenfolge). Die Verwendung von FindElementsInHostCoordinates kann daher hilfreich sein, um Fälle zu untersuchen, in denen Sie absichtlich oder unbeabsichtigt gestapelte Elemente haben. Möglicherweise möchten Sie die Reihenfolge für das Rendern und Treffertests korrigieren oder diese Reihenfolge aus anderen Gründen untersuchen.
FindElementsInHostCoordinates over an area is useful for two scenarios: basic hit testing and hit testing that is filtering for a specific element.
Grundlegende Treffertests
Für grundlegende Treffertests besteht das Ziel darin, zu ermitteln, welches Element in der Z-Reihenfolge einer App-UI am höchsten ist. Wenn Sie Treffertests für eine Mausinteraktion durchführen, verwenden Sie möglicherweise einen Punkt, aber für touchorientierte Treffertests ist es häufig geeignet, einen rechteckigen Bereich zu verwenden. Möglicherweise haben Sie Testszenarien getroffen, in denen Sie wissen möchten, welches Element in der oberen Z-Reihenfolge vorhanden ist, bevor ein Touchereignis stattfindet. Oder Sie haben möglicherweise einen Punkt, den Sie erweitern möchten, um ein Rechteck zu sein, um zu sehen, was sich in der Nähe eines Mittelpunkts befindet und welches Element das beabsichtigte Ziel sein könnte.
In diesem Szenario sollten Sie das Rechteck übergeben, das Sie für Treffertests als Wert des intersectingRect-Parameters interessieren. Für den Parameter "Subtree " können Sie ihn als NULL übergeben. Oder Sie können eine Unterstruktur angeben, die ein Element sein soll, das Ihnen bekannt ist, das Stammelement einer Seite ist, oder ein Element, das sie zum endgültigen Stopp für Treffertests machen möchten.
Die Reihenfolge des Elements in der zurückgegebenen IEnumerable von UIElement-Elementen entspricht sowohl dem Koordinatenbereich im Bereich als auch der Z-Reihenfolge. Es ist also möglich, Treffer für Elemente abzurufen, die nicht der höchsten Z-Reihenfolge entsprechen und daher nicht die Quelle von Eingabeereignissen sein konnten. Um sicherzustellen, dass Sie einen elementgefilterten Treffertest für alle Elemente aus der zurückgegebenen Liste ausführen können, an denen Sie interessiert sind, verwenden Sie denselben IntersectingRect , übergeben aber das Element von Interesse als Unterstruktur.
Treffertests mit Elementfiltern
Manchmal möchten Sie wissen, ob ein bestimmtes Element in einem Bereich der Benutzeroberfläche vorhanden ist. Wenn ja, können Sie diesen Bereich für intersectingRect angeben und das Element angeben, das Sie als Unterstrukturparameter suchen. Wenn der Rückgabewert nicht leer ist, bedeutet dies, dass das Element irgendwo in diesem Bereich vorhanden ist. Wenn Sie einen Bereich mit Treffertests testen, ist die Reihenfolge im Rückgabesatz nicht so nützlich zum Bestimmen der Z-Reihenfolge, da der Satz Elemente mit mehr als einer x-y-Koordinate enthält. Der Satz verfügt über eine Mischung aus Elementen, die an verschiedenen x-y-Koordinaten zeichnen, und auch Elemente, die vollständig oder teilweise übergezeichnet werden können. Verwenden Sie die Überladungen von FindElementsInHostCoordinaten , die einen Punkt verwenden, damit die x-y-Koordinaten und die visuelle Strukturreihenfolge nicht mehr ein Faktor sind, um eine Überzeichnungssituation wirklich zu untersuchen. Siehe FindElementsInHostCoordinates(Point,UIElement).
Wenn der Rückgabewert leer ist, bedeutet dies, dass das Unterstrukturelement im Bereich nicht vorhanden war.
Wenn Sie mit C# programmieren, wird der Rückgabewerttyp dieser Methode als generische IEnumerable-Auflistung projiziert, die UIElement-Elemente enthält. Wenn Sie mit C++ programmieren, ist der Rückgabetyp dieser Methode IIterable<UIElement>.
Weitere Informationen
Gilt für:
FindElementsInHostCoordinates(Point, UIElement, Boolean)
Ruft einen Satz von Objekten ab, die sich innerhalb eines angegebenen x-y-Koordinatenpunkts einer App-UI befinden. Der Satz von Objekten stellt die Komponenten einer visuellen Struktur dar, die diesen Punkt gemeinsam nutzen.
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
Der Punkt, der als Bestimmungspunkt verwendet werden soll. Dieser Punkt verwendet den Koordinatenbereich des App-Fensters, nicht eines bestimmten Elements (und nicht der Unterstruktur , sofern angegeben).
- subtree
- UIElement
Ein Objekt, nach dem gesucht werden soll. Wenn das Unterstrukturobjekt in der Gesamtmenge der Elemente vorhanden ist, die an den angegebenen intersectingPoint-Koordinaten vorhanden sind, enthält der Rückgabewert nur das Unterstrukturobjekt und alle Objekte, die eine höhere Z-Reihenfolge aufweisen als unterstruktur, aufgelistet durch Umgekehrte der Z-Reihenfolge. Wenn das Unterstrukturobjekt bei intersectingPoint-Koordinaten nicht vorhanden ist, ist der Rückgabewert leer.
- includeAllElements
-
Boolean
bool
"true ", um alle Elemente einzuschließen, die sich schneiden, einschließlich der Elemente, die für Treffertests als unsichtbar angesehen werden. false , um nur sichtbare, treffertestbare Elemente zu finden. Die Standardeinstellung ist false.
Gibt zurück
Ein aufzählbarer Satz von UIElement-Objekten , die sich in der visuellen Strukturkomposition am angegebenen Punkt befinden, aufgelistet durch Umkehrung der Z-Reihenfolge.
- Attribute
Beispiele
Aufgrund dieser XAML-Benutzeroberfläche:
<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>
Hier sind einige Beispielverwendungen und Ergebnisse von FindElementsInHostCoordinates, wobei verschiedene Unterstrukturwerte verwendet werden:
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
}
Hinweise
Ein Element wird als Treffertest angesehen, wenn es sowohl Platz im Layout belegt als auch "Freihand erzeugt". Bei Elementen, die einen Pinsel aufweisen, wird jeder Nicht-Null-Pinsel als etwas betrachtet, das Freihand erzeugt, auch wenn der Pinsel keine sichtbaren Pixel erzeugt. Beispielsweise erzeugt ein SolidColorBrush mit der Farbeinstellung "Transparent " immer noch Freihand. Nur ein Nullpinsel erzeugt keine Freihandeingabe. Die Opacity-Eigenschaft wird nicht berücksichtigt. Das Element erzeugt immer noch Freihand, auch wenn es sich um Opacity 0 handelt.
Wenn der parameter includeAllElements auf "true" festgelegt ist, werden Elemente, die keine Freihandeingabe erzeugen, für Treffertests berücksichtigt. In diesem Fall, solange das Element die räumlichen Anforderungen erfüllt (der Punkt überschneidet die Elementgrenzen), werden es und seine Vorgänger in die Ergebnisse einbezogen.
Hinweis
Einige spezielle Elemente, z. B. SwapChainPanel und MediaPlayerElement, verfügen nicht über einen Pinsel, können aber dennoch Freihand erzeugen.
Weitere Informationen
- FindElementsInHostCoordinates(Point, UIElement)
- FindElementsInHostCoordinates(Rect, UIElement)
- FindElementsInHostCoordinates(Rect, UIElement, Boolean)
- Point
- Mausinteraktionen
Gilt für:
FindElementsInHostCoordinates(Rect, UIElement, Boolean)
Ruft einen Satz von Objekten ab, die sich in einem angegebenen Rect-Frame einer App-UI befinden. Der Satz von Objekten stellt die Komponenten einer visuellen Struktur dar, die einen rechteckigen Bereich gemeinsam nutzen, und kann Elemente enthalten, die überdraniert werden.
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
Das Rect , das als Bestimmungsbereich verwendet werden soll. Dieser Frame verwendet den Koordinatenbereich des App-Fensters, nicht eines bestimmten Elements (und nicht der Unterstruktur , falls angegeben).
- subtree
- UIElement
Ein Objekt, nach dem gesucht werden soll. Wenn das Unterstrukturobjekt in der Gesamtmenge der Elemente vorhanden ist, die innerhalb des angegebenen IntersectingRect vorhanden sind, enthält der Rückgabewert nur das Unterstrukturobjekt und Die Elemente, die über dem Bereich gezeichnet werden. Wenn das Unterstrukturobjekt nicht innerhalb des intersectingRect-Frames vorhanden ist, ist der Rückgabewert leer.
- includeAllElements
-
Boolean
bool
"true ", um alle Elemente einzuschließen, die sich schneiden, einschließlich der Elemente, die für Treffertests als unsichtbar angesehen werden. false , um nur sichtbare, treffertestbare Elemente zu finden. Die Standardeinstellung ist false.
Gibt zurück
Ein aufzählbarer Satz von UIElement-Objekten , die sich in der visuellen Strukturkomposition im angegebenen Rect-Frame befinden.
- Attribute
Beispiele
Aufgrund dieser XAML-Benutzeroberfläche:
<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>
Hier sind einige Beispielverwendungen und Ergebnisse von FindElementsInHostCoordinates, wobei verschiedene Unterstrukturwerte verwendet werden:
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
}
Hinweise
Ein Element wird als Treffertest angesehen, wenn es sowohl Platz im Layout belegt als auch "Freihand erzeugt". Bei Elementen, die einen Pinsel aufweisen, wird jeder Nicht-Null-Pinsel als etwas betrachtet, das Freihand erzeugt, auch wenn der Pinsel keine sichtbaren Pixel erzeugt. Beispielsweise erzeugt ein SolidColorBrush mit der Farbeinstellung "Transparent " immer noch Freihand. Nur ein Nullpinsel erzeugt keine Freihandeingabe. Die Opacity-Eigenschaft wird nicht berücksichtigt. Das Element erzeugt immer noch Freihand, auch wenn es sich um Opacity 0 handelt.
Wenn der parameter includeAllElements auf "true" festgelegt ist, werden Elemente, die keine Freihandeingabe erzeugen, für Treffertests berücksichtigt. In diesem Fall, solange das Element die räumlichen Anforderungen erfüllt (das Rect überschneidet die Grenzen des Elements), werden es und seine Vorgänger in die Ergebnisse einbezogen.
Hinweis
Einige spezielle Elemente, z. B. SwapChainPanel und MediaPlayerElement, verfügen nicht über einen Pinsel, können aber dennoch Freihand erzeugen.
Weitere Informationen
- FindElementsInHostCoordinates(Point, UIElement)
- FindElementsInHostCoordinates(Rect, UIElement)
- FindElementsInHostCoordinates(Point, UIElement, Boolean)
- Mausinteraktionen