2017-05-22 8 views

Répondre

0

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"> 
+0

S'agit-il d'événements liés à la conception? – asv