如何在设置属性后仅进行一次UserControl初始化

时间:2013-08-21 12:13:40

标签: wpf xaml user-controls

代码:

public partial class MyControl : UserControl
{
    int size = 8;

    public int Size
    {
        get { return size; }
        set { size = value; Initialize(); }
    }

    public MyControl()
    {
        InitializeComponent();
        Initialize();
    }

    void Initialize()
    {
         // ...
    }
}

XAML:

<local:MyControl"/>

或:

<local:MyControl Size="10"/>

在XAML中设置Size属性时,会调用Initialize两次。如果我从Initialize移除InitializeComponent来电,Initialize将从Size setter调用Size。但在这种情况下,如果未在XAML中设置Initialize,则根本不会调用{{1}}。

在从XAML设置所有控件属性(如果有)之后,有没有办法编写初始化函数,执行一次?

1 个答案:

答案 0 :(得分:4)

您可以在Initialize事件处理程序中调用Loaded方法:

public partial class MyControl : UserControl
{
    int size = 8;

    public int Size
    {
        get { return size; }
        set { size = value; }
    }

    public MyControl()
    {
        InitializeComponent();

        Loaded += (o, e) => Initialize();
    }

    void Initialize()
    {
        // ...
    }
}