2

代码:

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"/>

SizeXAML 中设置属性时,Initialize会调用两次。如果我从中删除Initialize呼叫InitializeComponent,则从setterInitialize调用一次。Size但在这种情况下,如果Size没有在 XAML 中设置,Initialize则根本不会调用。

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

4

1 回答 1

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()
    {
        // ...
    }
}

为了确保该Initialize()方法只被调用一次,尽管Loaded可能会被多次触发,像这样分离事件处理程序:

public MyControl()
{
    InitializeComponent();
    Loaded += MyControlLoaded;
}

private void MyControlLoaded(object sender, RoutedEventArgs e)
{
    Loaded -= MyControlLoaded;
    Initialize();
}
于 2013-08-21T12:19:24.010 回答