2016-04-03 24 views
0

Çerçevem ​​var. kod arkasındaWPF: İçerik için yönlendirilmiş bir etkinlik nasıl oluşturuldu?

FrameName.Content = new PageName(); 

ben sayfa değiştiğinde bir film şeridi başlamak istiyorum, ve XAML yapmak istiyorum, ve: Ben bu hat ile sayfaları geçin. Aşağıdaki kodu denedim: Ben orada fark biraz arama yaptıktan sonra

<Frame.Triggers> 
    <EventTrigger RoutedEvent="ContentChanged"> 
     <BeginStoryboard Storyboard="{StaticResource storyboardName}" /> 
    </EventTrigger> 
</Frame.Triggers> 

yerleşik bir o doğanın yönlendirilmiş olay. İlk cevap here

en dinamik yaklaşım sadece ContentChanged olayı sağlayabilecek kendi etiket kontrolünü elde etmek olduğunu göstermektedir. Ben şuna benzer kullanmak XAML içinde

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); 
      } 
     } 
    } 
} 

:

Bu cevap Kodu uygulamak çalıştık

<local:MyFrame ContentChanged="MyFrame_ContentChanged" /> 

sorun sonunda ben bir oluşturmanız gerekir olmasıdır Olay işleyicisinde MyFrame_ContentChanged kod arkasında. Bunu saf XAML'de yapmanın bir yolu var mı? Örneğin - ContentChanged bağımlılık özelliğini bir tür yönlendirilmiş olaya dönüştürebilir miyim?

+0

WPF'ye çok yeni geldim, bu yüzden bu aptalca bir soru. Ancak, ciddi bir cevap için minnettar olurdum. – Sipo

+1

"EventTrigger" içinde kullanmak için bir "RoutedEvent" kullanmanız gerekir. Yönlendirilmiş olaylar, bağımlılık özelliklerine benzer şekilde tanımlanır. Sizin için iyi bir başlangıç ​​noktası bu eğitici olacaktır: [Nasıl Yapılır: Özel Yönlendirilmiş Etkinlik Oluşturun] (https://msdn.microsoft.com/en-us/library/ms752288 (v = vs.100) .aspx). – Grx70

+0

@ Grx70, \t Teşekkürler. Lütfen nasıl çalıştığını gösterebilir misiniz ve bunu yukarıdaki kodla nasıl entegre edebilirim? – Sipo

cevap

1

Olayları EventTriggers ile kullanmak için yönlendirilmiş olaylar yapılmalıdır. Yönlendirilmiş olaylar bağımlılık özelliklerine benzer şekilde tanımlanır. Başlamak için hızlı bir öğretici: How to: Create a Custom Routed Event. Bu hattı test bir Style içine çalıştı, ama bir istisna attı ise, ancak kullanılan iken neden

public class MyContentControl : ContentControl 
{ 
    public static readonly RoutedEvent ContentChangedEvent 
     = EventManager.RegisterRoutedEvent(
      "ContentChanged", 
      RoutingStrategy.Bubble, 
      typeof(RoutedEventHandler), 
      typeof(MyContentControl)); 

    public event RoutedEventHandler ContentChanged 
    { 
     add { AddHandler(ContentChangedEvent, value); } 
     remove { RemoveHandler(ContentChangedEvent, value); } 
    } 

    protected override void OnContentChanged(object oldContent, object newContent) 
    { 
     base.OnContentChanged(oldContent, newContent); 
     RaiseEvent(new RoutedEventArgs(ContentChangedEvent, this)); 
    } 
} 

henüz emin değilim: Burada

bir ContentChanged olayı tanımlayan ContentControl bir sınıf türetme bir örnek doğrudan denetimin tetikleyiciler koleksiyonunda:

<EventTrigger RoutedEvent="ContentChanged">...</EventTrigger> 

ben bir tam olay yolunu belirtmek zorunda bu durumda çalışmasını sağlamak amacıyla:

<EventTrigger RoutedEvent="local:MyContentControl.ContentChanged">...</EventTrigger>