Ich habe einen Rahmen. Ich schalte Seiten mit dieser Zeile:WPF: Wie wurde ein Routingereignis für den Inhalt erstellt?
FrameName.Content = new PageName();
ich ein Storyboard beginnen soll, wenn die Seite geändert hat, und ich möchte es in XAML zu tun, und nicht in Code-behind. Ich habe den folgenden Code versucht:
<Frame.Triggers>
<EventTrigger RoutedEvent="ContentChanged">
<BeginStoryboard Storyboard="{StaticResource storyboardName}" />
</EventTrigger>
</Frame.Triggers>
Nach etwas Suche ich erkannte es keine integrierte in geroutet Ereignis dieser Art. Die erste Antwort here legt nahe, dass
Der dynamische Ansatz ist Ihre eigene
LabelSteuerung einfach ableiten, die ein ContentChanged Ereignis zur Verfügung stellt.
Ich habe versucht, den Code in dieser Antwort zu implementieren:
using System.Windows;
using System.Windows.Controls;
namespace ContentChangedTest
{
class MyFrame : Frame
{
public event DependencyPropertyChangedEventHandler ContentChanged;
static MyFrame()
{
ContentProperty.OverrideMetadata(typeof(MyFrame), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnContentChanged)));
}
private static void OnContentChanged(DependencyObject dp, DependencyPropertyChangedEventArgs e)
{
MyFrame frame = dp as MyFrame;
if (frame.ContentChanged != null)
{
DependencyPropertyChangedEventArgs args = new DependencyPropertyChangedEventArgs(ContentProperty, e.OldValue, e.NewValue);
frame.ContentChanged(frame, args);
}
}
}
}
In XAML Ich benutze es wie folgt aussehen:
<local:MyFrame ContentChanged="MyFrame_ContentChanged" />
Das Problem ist, dass schließlich muss ich eine erstellen Event-Handler MyFrame_ContentChanged
im Code-Behind. Gibt es eine Möglichkeit, dies in reinem XAML zu tun? Zum Beispiel - kann ich die ContentChanged
Abhängigkeitseigenschaft in irgendeine Art von Routingereignis umwandeln?
Ich bin sehr neu in WPF, also ist es mehr als wahrscheinlich, dass dies eine dumme Frage ist. Ich wäre jedoch dankbar für eine ernsthafte Antwort. – Sipo
Um es in 'EventTrigger' zu verwenden, müssen Sie ein' RoutedEvent' verwenden. Routingereignisse werden ähnlich wie Abhängigkeitseigenschaften definiert. Ein guter Ausgangspunkt für Sie wäre dieses Tutorial: [Vorgehensweise: Erstellen eines benutzerdefinierten Routingereignisses] (https://msdn.microsoft.com/en-us/library/ms752288 (v = vs. 100) .aspx). – Grx70
@ Grx70, \t Danke. Könnten Sie bitte demonstrieren, wie es funktioniert und wie kann ich das mit dem obigen Code integrieren? – Sipo