Events 使自定义控件或自定义面板在UWP中的设计时接收事件

Events 使自定义控件或自定义面板在UWP中的设计时接收事件,events,uwp,design-time,Events,Uwp,Design Time,如何使自定义控件或自定义面板在UWP中的设计时接收事件? 例如,自定义控件可以在调整大小时接收事件,自定义面板可以在另一个控件被推入时接收事件。如果要在自定义控件调整大小时接收事件,可以订阅SizeChanged事件。当控件大小更改时,将调用SizeChanged事件,然后您可以从sizechangedventargs处理新大小或以前的大小 <Button SizeChanged="Button_SizeChanged"/> private void Button_SizeChan

如何使自定义控件或自定义面板在UWP中的设计时接收事件?
例如,自定义控件可以在调整大小时接收事件,自定义面板可以在另一个控件被推入时接收事件。

如果要在自定义控件调整大小时接收事件,可以订阅
SizeChanged
事件。当控件大小更改时,将调用
SizeChanged
事件,然后您可以从
sizechangedventargs
处理新大小或以前的大小

<Button SizeChanged="Button_SizeChanged"/>

private void Button_SizeChanged(object sender, SizeChangedEventArgs e)
{
    // do some stuf
}
可以在调整大小时接收事件,而在自定义面板中按下另一个控件时接收事件

您可以在方法中调用自定义事件。因为ArrangeOverride实现的必要模式是通过Panel.Children中的每个元素进行循环。始终对每个元素调用Arrange方法

public class BoxPanel : StackPanel
{
    public event EventHandler<ElementEventArgs> AddedElement;
    protected override Size ArrangeOverride(Size finalSize)
    {
        if (Children.Count > 0)
        {
            UIElement ele = Children.Last<UIElement>();
            if (ele != null && AddedElement != null)
            {
                this.AddedElement(this, new ElementEventArgs(ele));
            }
        }
        return base.ArrangeOverride(finalSize);
    }
}
public class ElementEventArgs : EventArgs
{
    private UIElement newElement;
    public UIElement NewElement { get => newElement; set => newElement = value; }

    public ElementEventArgs(UIElement ele)
    {
        this.newElement = ele;
    }
}

这些活动是设计时的活动吗?
public class BoxPanel : StackPanel
{
    public event EventHandler<ElementEventArgs> AddedElement;
    protected override Size ArrangeOverride(Size finalSize)
    {
        if (Children.Count > 0)
        {
            UIElement ele = Children.Last<UIElement>();
            if (ele != null && AddedElement != null)
            {
                this.AddedElement(this, new ElementEventArgs(ele));
            }
        }
        return base.ArrangeOverride(finalSize);
    }
}
public class ElementEventArgs : EventArgs
{
    private UIElement newElement;
    public UIElement NewElement { get => newElement; set => newElement = value; }

    public ElementEventArgs(UIElement ele)
    {
        this.newElement = ele;
    }
}
<local:BoxPanel  x:Name="MyBox"  AddedElement="MyBox_AddedElement">