2018/06/19

Extending the Shown Event in WPF


Using the Shown Event.

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var eventExtend = this.EventExtend();
        eventExtend.AddShownEventHandler(this.MainWindow_Shown);
    }

    public void MainWindow_Shown(object sender, EventArgs e)
    {
            
    }
}

Fire the Shown Event using the LayoutUpdated Event.


public class FrameworkElementEventExtend
{
    public event EventHandler Shown;

    private bool initialized;
    private readonly FrameworkElement frameworkElement;

    public FrameworkElementEventExtend(FrameworkElement frameworkElement)
    {
        this.frameworkElement = frameworkElement;

        this.frameworkElement.LayoutUpdated += FrameworkElement_LayoutUpdated;
    }

    private void FrameworkElement_LayoutUpdated(object sender, EventArgs e)
    {
        if (!this.initialized && (this.frameworkElement.ActualHeight > 0 || this.frameworkElement.ActualWidth > 0))
        {
            this.Shown?.Invoke(this, EventArgs.Empty);

            this.initialized = true;

            this.frameworkElement.LayoutUpdated -= FrameworkElement_LayoutUpdated;
        }
    }
}

public static class FrameworkElementEventExtendHelper
{
    public static FrameworkElementEventExtend EventExtend(this FrameworkElement frameworkElement)
    {
        FrameworkElementEventExtend eventExtend = new FrameworkElementEventExtend(frameworkElement);
        return eventExtend;
    }

    public static void AddShownEventHandler(this FrameworkElementEventExtend eventExtend, EventHandler eventHandler)
    {
        eventExtend.Shown += eventHandler;
    }
}

댓글 없음:

댓글 쓰기

C# 문자열 포함 여부 확인하기.

ToUpper() 를 사용하면 불필요한 문자열을 생성하므로 좋은 방법은 아니다. string text = "This is an apple." ; string apple = "Apple." ; bool ...