【WPF】UserControl 的 Load事件

经过查看MSDN,总结下 UserControl 的 Load 事件:

 

Q1:Load事件什么时候发生?

在控件第一次变为可见之前发生。

Load事件发生在创建 UserControl 时,因此有些情况下Load事件会被调用多次,比如 UserControl加载时,或者重建操作时(一种情况是调用 RecreateHandle 方法,重新为控件创建句柄)。

 

Q2:使用Load事件需要注意什么?

  1. 如果UserControl是一个MDI子窗体的一部分,那么每次子窗体每次显示时都会触发Load事件。
  2. 由于Load事件可能被调用多次,因此应该把初始化代码放在构造器中,而不是Load事件中。也不应该在Load的事件处理程序中应用Data Binding。

 

Q3:应该在Load事件中做什么操作?

可以在Load的事件处理程序中,分配UserControl使用的资源。

转载于:https://www.cnblogs.com/songxingzheng/p/5899363.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF UserControl 绑定一般分为两种情况: 1. UserControl 内部控件与 ViewModel 绑定 在 UserControl 内部控件与 ViewModel 绑定时,需要给 UserControl 的 DataContext 属性设置为 ViewModel 的实例,然后在控件内部使用 Binding 绑定控件的属性与 ViewModel 的属性即可。 2. UserControl 的依赖属性绑定 在 UserControl 中定义依赖属性时,可以使用 DependencyProperty.Register 方法来注册依赖属性。然后在使用 UserControl 的地方,就可以使用 Binding 绑定 UserControl 的依赖属性与 ViewModel 的属性。 下面是一个示例: UserControl XAML 代码: ```xml <UserControl x:Class="MyUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <TextBox Text="{Binding Text, Mode=TwoWay}" /> </Grid> </UserControl> ``` UserControl CodeBehind 代码: ```csharp public partial class MyUserControl : UserControl { public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(MyUserControl)); public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } public MyUserControl() { InitializeComponent(); DataContext = this; } } ``` 使用 MyUserControl 的地方: ```xml <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MyNamespace" Title="MainWindow"> <StackPanel> <local:MyUserControl Text="{Binding MyText, Mode=TwoWay}" /> <TextBlock Text="{Binding MyText}" /> </StackPanel> </Window> ``` MainWindow CodeBehind 代码: ```csharp public partial class MainWindow : Window, INotifyPropertyChanged { private string _myText; public string MyText { get { return _myText; } set { _myText = value; OnPropertyChanged(nameof(MyText)); } } public MainWindow() { InitializeComponent(); DataContext = this; } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值