Comment faire en sorte qu'un contrôle personnalisé ou un panneau personnalisé reçoive des événements au moment du design dans UWP? Par exemple, un contrôle personnalisé peut recevoir un événement lors du redimensionnement et un panneau personnalisé un événement lorsqu'un autre contrôle y est ajouté.Création d'un contrôle personnalisé ou d'un panneau personnalisé pour la réception d'événements au moment de la conception dans UWP
Répondre
Si vous souhaitez recevoir un événement lorsque le contrôle personnalisé est redimensionné, vous pouvez vous abonner à l'événement SizeChanged
. Lorsque la taille du contrôle a été modifiée, l'événement SizeChanged
est appelé et vous pouvez gérer la nouvelle taille ou la taille précédente à partir de SizeChangedEventArgs
.
<Button SizeChanged="Button_SizeChanged"/>
private void Button_SizeChanged(object sender, SizeChangedEventArgs e)
{
// do some stuf
}
Vous pouvez également créer un événement Resize
pour écouter la variété de la taille de contrôle basé sur l'événement 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);
}
}
}
pourrait recevoir un événement sur Redimensionner et un panneau personnalisé un événement lorsqu'un autre contrôle est poussé à l'intérieur.
Vous pouvez appeler votre événement personnalisé dans la méthode ArrangeOverride
. Parce que le modèle nécessaire d'une implémentation ArrangeOverride est la boucle à travers chaque élément dans Panel.Children. Appelez toujours la méthode Arrange sur chacun de ces éléments.
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;
}
}
Si vous êtes abonné à l'événement AddedElement
, l'événement AddedElement
sera appelée lorsque le nouveau contrôle poussé à l'intérieur de votre panneau personnalisé.
<local:BoxPanel x:Name="MyBox" AddedElement="MyBox_AddedElement">
S'agit-il d'événements liés à la conception? – asv