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

Sizeプロパティが XAML で設定されている場合、Initializeが 2 回呼び出されます。Initializeから呼び出しを削除するとInitializeComponent、setterInitializeから 1 回呼び出されます。Sizeただし、この場合、SizeXAML で設定されていない場合は、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()メソッドが 1 回だけ呼び出されるようにするには、次のようにイベント ハンドラーを切り離します。Loaded

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

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