Es geht um eine WinRT Anwendung, aber das Verhalten ist bei WPF und Silverlight gleich.
Ich habe ein Image mit einem Click-Event. Dadrüber wird ein Grid eingeblendet.
Wenn auf dem Grid genau auf der Position des Images geklickt wird, dann wird das Click.Event an das Image weiter gereicht, wenn das Grid ausgeblendet wird.
Das ist wirklich seltsam. Ich müßte die Weitergabe des Events blockieren.
Hat jemand eine Idee wie das geht?
dann wird das Click.Event an das Image weiter gereicht, wenn das Grid ausgeblendet wird.
Das ist wirklich seltsam.
Ne - das ist nicht seltsam 😉
Ausgeblendete bzw. unsichtbare Control(-Teile) erhalten nie Mausevents.
Transparente Controls hingegen schon (mache also als Lösung das Grid mur transparent); siehe {x:Null} vs. Transparent
Ich habe auch schon probiert auszublenden:
gridControlls.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
Sobald ich es einblende werden die Events genau so aufgerufen.
Was willst du jetzt eigentlich genau erreichen?
Dass die Events vom Grid abgefangen werden oder nicht?
Ich möchte, dass die Events nicht an das Image unter dem Grid geleitet werden, nachdem es wieder sichtbar ist.
Es scheinen sich die Events in einer Queue zu sammeln und wenn das Image wieder sichtbar ist, werden die ausgelöst.
Ich möchte, dass die Events nicht an das Image unter dem Grid geleitet werden, nachdem es wieder sichtbar ist.
Das hab' ich jetzt nicht genau verstanden: Du hast also ein Grid, dass (wie du es willst), Events eines darunterliegenden Images quasi "abfängt". Dann blendest du es aus, die Events landen (ebenso korrekterweise) beim Image.
Und dann blendest du das Grid wieder ein und die Events landen immer noch beim Image.
Richtig soweit?
Am besten postest du mal ein wenig Code; idealerweise in der Form von [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden
Nicht ganz richtig. Image wird von einem Grid verdeckt, auf das Grid wird an der Position des Image geklickt, es passiert in dem Moment nichts (ist so gewollt). Jetzt wird das Grid ausgeblendet und in dem Augenblick wird das Click-Event gefeuert. Wie bereits geschrieben finde ich dieses Verhalten seltsam.
Ich glaube es hat doch nur etwas mit WinRT und Asynchronität zu tun. Normal dürfte so etwas nicht passieren.
Jetzt wird das Grid ausgeblendet
Wann genau? Bzw. aufgrund von welchem Ereignis?
Evtl. ist der Klick einfach noch nicht abgearbeitet; blende das Grid testweise mal mit einem Dispatcher.BeginInvoke aus, dem du eine sehr niedrige Priorität übergibst (Idle oder so ähnlich).
Ich glaube es hat doch nur etwas mit WinRT und Asynchronität zu tun. Normal dürfte so etwas nicht passieren.
Wie gesagt: Wenn du es mit wenig Code reproduziert kriegst, wäre das ganz hilfreich.
Hallo winSharp93. Vielen Dank für deine Tipps.
Hiermit funktioniert es:
private async void HideGridPleaseWait()
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
gridPeaseWait.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
});
}
private voidgridPeaseWait_LayoutUpdated(objectsender, objecte)
{
if(gridPeaseWait.Visibility == Windows.UI.Xaml.Visibility.Collapsed)
{
myImage.IsHitTestVisible = true;
}
else
{
myImage.IsHitTestVisible = false;
}
}
Hallo,
Du hattest also das Grid innerhalb eines Click-Events "ausgeblendet". Beim Loslassen der Maustaste (MouseUp) löst das Click-Event des Images aus.
Dann hätte es wahrscheinlich auch funktioniert, wenn Du das Grid bei MouseUp "ausgeblendet" hättest.
Nein, ich habe es nicht in einem Click-Event ausgeblendet.
Mit einem Click-event habe ich eine asynchrone Funktion zum Öffnen eines Bildes von der Festplatte gestartet. Am Ende dieser Funktion habe ich über eine Flag-Variable in einem zyklischen Timer die Funktion HideGridPleaseWait() aufgerufen.