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));
}
}
}
正常,我會用示例更新帖子 –
您的事件是RoutedEvent還是正常的.NET事件? –
嘗試使用RoutedEvent或RoutedUiEvent並查看它是否有效,這可能是原因,因爲觸發器假定事件路由我猜。 –