Hallo talla,
Du kannst dir einfach ein RoutedEvent mit Tunneling erstellen. Dann bekommst du auch in dem Child das Event wenn das Window es auslöst.
... das geht eben gerade nicht, das hatte ich nämlich probiert. Der Grund ist mir - jetzt hinterher - schon klar: Da ja das Ereignis nur bis dahin tunnelt, wo es quasi auftritt, geht es nicht tiefer als die Ebene "Window". Meine Trugschluß war, das ein "Tunneling-Event" immer die ganze Control-Struktur durchläuft, das tut er aber nicht - sondern er läuft nur bis zum Eventauslösenden Control und dann wieder hinauf (sofern auch noch was zum Bubblen definiert wurde).
@ErfinderDesRades
so geht das glaub nicht.
Ein untergeordnetes Element abonniert nicht die Events seines Parents
... genau das wollte ich aber tun. Mein Problem war, ich habe zur Designzeit keine Referenz auf mein "MainWindow" um per " ...+= ..." den Event zu abonieren. Durch einen kleinen Trick klappt das nun aber. Ich erstelle das Abo nicht wie üblicherweise beim Init meines Controls, sondern einfach in einer eigenen Methode . Diese Methode wird durch das 'MainWindow' nach der Initialisierung aufgerufen und schon klappt es.
vielen Dank für eure Bemühungen und Denkanstöße
viele Grüße
Paul
Hallo talla,
ok, so langsam dämmert es, dass beim Klick auf den Windowbereich der Mouseevent ja gar nicht beim Stackpanel aufgetreten ist und deshalb ein vom Stackpanel aboniertes Ereignis auch nicht auftreten kann ...
wieder etwas gelernt, was ich eigentlich gar nicht gefragt hatte und in meiner Unkenntnis ein unpassendes Beispiel konstruiert hatte ... 😉
das hilft mir aber leider nicht bei meinem ursprünglichen Problem:
... ich möchte gern in einem untergeordneten Control einen Event eines übergeordneten Controls abonieren. ... (siehe oben)
.. konkret geht es darum, das ich ein WPF-Fenster habe, in dieses werden - je nach Anforderung diverse Usercontrols geladen - und in diesen Usercontrols muss ich wissen, wenn sich im WPF-Fenster ein Zustand geändert hat. Also habe ich im WPF-Fenster einen Event erstellt und wollte in den Usercontrols mich einfach dranhängen - das klappt aber nicht.
viele Grüße
Paul
Guten Morgen Erfinder,
mir scheint, du behandelst nur das PreviewMouseDown des Stackpanels.
woraus schließt du das ? In der AddHandler-Methode gebe ich doch mit "MainWindow.PreviewMouseDownEvent" explizit den Event des MainWindow an ?
Ich war bisher der Meinung, mit AddHandler wird einfach nur in irgendeiner internen Liste im System eine (nämlich meine angegebene) Methode zugefügt, damit diese beim Eintreffen eines Events abgearbeitet wird ... anscheinend ist dies nicht so - deswegen also meine Frage an die Wissenden hier; wie kann ich einen Event eines übergeordneten Controls abonieren ?
viele Grüße
Paul
Hallo ,
ich möchte gern in einem untergeordneten Control einen Event eines übergeordneten Controls abbonieren.
Im folgenden Beispiel soll also die Methode 'Methode_A' ausgeführt werden, wenn das Ereignis 'PreviewMouseDownEvent' im MainWindow eintritt.
ein simples Beispiel dazu (Window mit Grid, Stackpanel und Button ineinanderliegend und farblich voneinander abgesetzt):
XAML:
<Window x:Class="Demo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Background="Gray" Margin="50">
<StackPanel Name="stackpanel" Background="Blue" Margin="50">
<Button Margin="20" Content="Ok"></Button>
</StackPanel>
</Grid>
</Window>
und der Code dazu:
namespace Demo
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
stackpanel.AddHandler(MainWindow.PreviewMouseDownEvent, new RoutedEventHandler(Methode_A), true);
}
void Methode_A(Object sender, RoutedEventArgs e)
{
MessageBox.Show("Hier Methode A");
}
}
}
Wenn ich dieses nun starte und in den weissen Bereich des Window klicke, dann wird meine Methode_A aber nun NICHT ausgeführt, , obwohl doch das Ereignis 'PreviewMouseDownEvent' auf jeden Fall eingetreten ist.
Wo ist mein Denkfehler, bzw. wie erreiche ich mein Wunschziel ?
viele Grüße
Paul
Hallo Michael,
kleines Zeichen, grosse Wirkung ... das war das Problem !
Bisher wußte ich nicht, dass da extra noch ein "/" für das Root-Verzeichnis angegeben werden muss. Wieder was gelernt. 😉
Danke und Tschüß
Paul
Hallo,
Meine ersten Versuche mit WPF laufen doch recht schleppend, mir erschließt sich in vielen Fällen nicht die Logik der XAML-Syntax. Aber das kommt hoffentlich noch. Allerdings komme ich bei folgendem Fehler nicht weiter:
Die komplette Fehlermeldung lautet: > Fehlermeldung:
Die Datei "Info.xml" ist nicht Bestandteil des Projekts, oder ihre "Build Action"-Eigenschaft ist nicht auf "Resource" festgelegt.
Aber beide Aussagen sind falsch, d.h. die Datei ist sowohl Bestandteil des Projekts, sie ist im Ordner vorhanden, und bei der Eigenschaft "Buildvorgang" ist "Resource" ausgewählt (die genaue "Build Action"-Eigenschaft finde ich nicht, aber vermute das es diejenige sein soll)
Ich habe ein Klassenbibliotheksprojekt erstellt und wollte diese externe XML-Datei in einer Resource verwenden:
<XmlDataProvider x:Key = "Information" Source="Info.xml" />
In dieser Zeile tritt der Fehler auf (Wellenlinie unter "Source ...")
Ich arbeite mit Win7 und Studio 2010 dt. Prof.
Kann mir hierbei jemand weiterhelfen ?
viele Grüße
Paul