2013-07-01 93 views
2

我使用一些自定義屬性和一個自定義事件將我自己的滑塊做爲用戶控件。一切工作正常,但最近我開始使用Caliburn Micro,我不知道如何捕捉我的自定義事件。caliburn winrt usercontrol並捕獲自定義事件

以前我用:

<my:RadialSlider x:Name="slider" WedgeAngle="270" ..... AngleChanged="slider_AngleChanged" /> 

public void slider_AngleChanged(object sender, ValueChangedEventArgs e) 
{ 
.... something .... 
} 

現在,在卡利項目我想:

<my:RadialSlider x:Name="slider" WedgeAngle="270" ..... cal:Message.Attach="[Event AngleChanged] = [Action slider_AngleChanged($eventArgs)]" /> 

,並在我的ViewModel:

public void slider_AngleChanged(object sender, ValueChangedEventArgs e) 
    { 
    .... something .... 
    } 

但是,這不起作用...

那麼,如何捕捉這個事件呢?

滑塊UC後臺代碼:

public delegate void AngleChangedEventHandler(object sender, ValueChangedEventArgs e); 

    public sealed partial class RadialSlider : UserControl 
    { 
public event AngleChangedEventHandler AngleChanged; 

     private void OnAngleChanged(ValueChangedEventArgs e) 
     { 
      if (AngleChanged != null) 
       AngleChanged(this, e); 
     } 

public static readonly DependencyProperty WedgeAngleProperty = DependencyProperty.Register("WedgeAngle", typeof(double), typeof(RadialSlider), new PropertyMetadata((double)270, new PropertyChangedCallback(OnPropertyWedgeAngleChanged))); 
     public double WedgeAngle 
     { 
      get { return (double)this.GetValue(WedgeAngleProperty); } 
      set { this.SetValue(WedgeAngleProperty, value); } 
     } 

private static void OnPropertyWedgeAngleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
     { 
      (sender as RadialSlider).UpdateControls(); 
      if (e.NewValue != e.OldValue) 
      { 
       (sender as RadialSlider).OnAngleChanged(new ValueChangedEventArgs((double)e.OldValue, (double)e.NewValue)); 
      } 
     } 

}

+0

正常,我會用示例更新帖子 –

+0

您的事件是RoutedEvent還是正常的.NET事件? –

+0

嘗試使用RoutedEvent或RoutedUiEvent並查看它是否有效,這可能是原因,因爲觸發器假定事件路由我猜。 –

回答

0

您需要使用路由事件。這與事件如何讓視覺樹起泡,以及Caliburn.Micro如何將它們附加到它們上面有關。標準事件應該避免使用Xaml的任何技術中的控件或UI小部件,因爲它們在一些非常時髦的功能(冒泡上/下)上鬆動。