13,347
社区成员
发帖
与我相关
我的任务
分享
using System.Windows;
using System.Windows.Controls;
public partial class FullNameText : TextBlock
{
public FullNameText()
{
this.IsMappingChanged += new RoutedEventHandler(FullNameText_IsMappingChanged);
this.Loaded+=new RoutedEventHandler(FullNameText_Loaded);
//这个是触发自定义事件的方法,注释后,IsMappingChanged事件得不到响应
//RaiseEvent(new RoutedEventArgs(FullNameText.IsMappingChangedEvent);
}
//这个事件不能触发
private void FullNameText_IsMappingChanged(object sender, RoutedEventArgs e)
{
MessageBox.Show("触发自定义事件");
}
//这个事件可以触发
private void FullNameText_Loaded(object sender, RoutedEventArgs e)
{
MessageBox.Show("触发系统事件");
}
//属性
public bool IsMapping
{
get { return (bool)this.GetValue(IsMappingProperty); }
set { this.SetValue(IsMappingProperty, value); }
}
//事件
public event RoutedEventHandler IsMappingChanged
{
add { this.AddHandler(FullNameText.IsMappingChangedEvent, value); }
remove { this.RemoveHandler(FullNameText.IsMappingChangedEvent, value); }
}
// 注册IsMappingChanged事件
public static readonly RoutedEvent IsMappingChangedEvent =
EventManager.RegisterRoutedEvent
("IsMappingChanged",
RoutingStrategy.Direct,
typeof(RoutedEventHandler),
typeof(FullNameText));
// 注册IsMapping属性
public static DependencyProperty IsMappingProperty =
DependencyProperty.Register
("IsMapping",
typeof(bool),
typeof(FullNameText),
new PropertyMetadata(false));
}
public static readonly RoutedEvent PrepareToSleepEvent;
static Window1()
{
PrepareToSleepEvent = EventManager.RegisterRoutedEvent("PrepareToSleep", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Window1));
}
public event RoutedEventHandler PrepareToSleep
{
add { AddHandler(Window1.PrepareToSleepEvent, value); }
remove { RemoveHandler(Window1.PrepareToSleepEvent, value);}
}
public Window1()
{
InitializeComponent();
SystemEvents.PowerModeChanged +=new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
this.Awake += (o, e) => { PrepareToSleep(); };
}
private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
if (e.Mode == PowerModes.Suspend)
{
RoutedEventArgs arg = new RoutedEventArgs(Window1.PrepareToSleepEvent);
this.RaiseEvent(arg);
}
}
private void PrepareToSleep()
{
// do something.
}