如何使自定义控件或自定义面板在UWP中以设计时间接收事件? 例如,自定义控件可以在调整大小时接收事件,而自定义面板可以在其中推送另一个控件时接收事件。
答案 0 :(得分:0)
如果要在自定义控件调整大小时收到事件,可以订阅SizeChanged
事件。当控件的大小发生更改时,将调用SizeChanged
事件,然后您可以处理SizeChangedEventArgs
中的新大小或以前的大小。
<Button SizeChanged="Button_SizeChanged"/>
private void Button_SizeChanged(object sender, SizeChangedEventArgs e)
{
// do some stuf
}
您还可以创建Resize
事件,以根据SizeChanged
事件收听各种控件尺寸。
<local:CustomControl Resize="CustomControl_Resize"/>
public sealed class CustomControl : TextBox
{
public event SizeChangedEventHandler Resize;
public CustomControl()
{
this.SizeChanged += CustomControl_SizeChanged;
}
private void CustomControl_SizeChanged(object sender, SizeChangedEventArgs e)
{
if(this.Resize != null)
{
this.Resize(this, e);
}
}
}
可以在调整大小和自定义面板时收到一个事件,当另一个控件被推入其中时。
您可以使用ArrangeOverride
方法调用自定义事件。因为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;
}
}
如果您订阅了AddedElement
事件,则在您的自定义面板中推送新控件时,将调用AddedElement
事件。
<local:BoxPanel x:Name="MyBox" AddedElement="MyBox_AddedElement">