2010-04-20 3 views
0

Dans une application SL4, je dois redéfinir mes TabItems (en fait ajouter un bouton dans l'en-tête).Le modèle SilverIt TabItem ne fonctionne pas correctement

J'ai donc pris le modèle de contrôle TabItem de here et ajouté la fonctionnalité que je voulais. Cela semble fonctionner correctement, (je pourrais ajouter dynamiquement des tabitems) avec une exception: Je pense que ce modèle de contrôle posté se comporte d'une manière ou d'une autre "arbitraire": chaque fois que la souris passe sur un en-tête TabItem non sélectionné, ceci est sélectionné Sans cliquer !! (Ceci n'est pas le comportement par défaut: l'utilisateur doit cliquer sur un en-tête pour faire de ce tabitem le tabi sélectionné).

J'ai essayé de trouver pourquoi il se comporte comme ça, sans chance! Y at-il quelqu'un qui peut éclairer mes ténèbres ???

Merci d'avance!

Répondre

0

Eh bien, il s'avère que l'erreur n'était pas dans le modèle de contrôle mais dans la classe, le style a été appliqué.

En détail: la classe le style a été appliqué à est la suivante (en elle, vous verrez mon commentaire sur le "mauvais comportement"):

public class WorkspaceViewModel: TabItem {

public WorkspaceViewModel() 
    { 
     DefaultStyleKey = typeof(WorkspaceViewModel); 
    } 
    public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     Button closeButtonSel = base.GetTemplateChild("PART_CloseTopSelected") as Button; 
     Button closeButtonUnsel = base.GetTemplateChild("PART_CloseTopUnSelected") as Button; 
     if (closeButtonSel != null) 
      closeButtonSel.Click += new RoutedEventHandler(closeButtonSel_Click); 
     if (closeButtonUnsel != null) 
      closeButtonUnsel.Click += new RoutedEventHandler(closeButtonSel_Click); 

     //this part is causing the effect i was complaining about! 
     //and has to be removed 
     this.MouseEnter += delegate(object sender, MouseEventArgs e) 
     { 
      IsSelected = true; 
     }; 


    } 

    void closeButtonSel_Click(object sender, RoutedEventArgs e) 
    { 
     //this is the close request method used in the CloseTabItemCommand 
     OnRequestClose(); 

    } 


    #region CloseTabItemCommand 

    private RelayCommand closeTabItemCommand; 
    public ICommand CloseTabItemCommand 
    { 
     get 
     { 
      if (this.closeTabItemCommand == null) 
       this.closeTabItemCommand = new RelayCommand(p => this.OnRequestClose(), p => this.CanCloseTabItem()); 

      return this.closeTabItemCommand; 
     } 
    } 
    private bool CanCloseTabItem() 
    { 
     return true; 
    } 

    public event EventHandler RequestClose; 
    private void OnRequestClose() 
    { 
     if (RequestClose != null) 
      RequestClose(this, EventArgs.Empty); 
    } 
    #endregion 
}