2010-10-01 4 views

Répondre

3

Pour ce faire, il vous suffit de modifier le modèle Expander pour utiliser les contrôles Surface à la place des contrôles habituels. Le modèle par défaut de Expander peut être trouvé à http://msdn.microsoft.com/en-us/library/ms753296.aspx.

Tout ce que vous devez changer est le ToggleButton:

<ToggleButton OverridesDefaultStyle="True" 
       Template="{StaticResource ExpanderToggleButton}" 
       IsChecked="{Binding IsExpanded, Mode=TwoWay, 
       RelativeSource={RelativeSource TemplatedParent}}"> 

changements à

<s:SurfaceToggleButton OverridesDefaultStyle="True" 
         Template="{StaticResource ExpanderToggleButton}" 
         IsChecked="{Binding IsExpanded, Mode=TwoWay, 
         RelativeSource={RelativeSource TemplatedParent}}"> 

(tags fermeture omis)

Cela suppose s est lié à l'espace de noms XML Surface:

xmlns:s="http://schemas.microsoft.com/surface/2008" 
0

Je déteste necro un sujet aussi ancien, mais c'était le meilleur résultat google et j'ai trouvé une solution qui a mieux fonctionné pour moi.

Après mon chargement de l'interface graphique, j'utilise le VisualTreeHelper de manière récursive pour générer un List<DependencyObject> de tous les objets de l'interface graphique au moment de l'exécution. Mon projet nécessitait cette liste d'objets GUI pour d'autres raisons, mais cela m'a aussi donné une solution très simple à l'ajout de Touch-support pour les contrôles non-Surface.

viewObjectList.ForEach(x => 
     { 
      var temp = x as System.Windows.Controls.Primitives.ToggleButton; 
      if (temp != null) 
      { 
       temp.IsManipulationEnabled = true; 
       temp.TouchUp += TouchUpEvent; 
      } 
     }); 

Itérer dans la liste des objets de l'interface graphique, trouver les ToggleButtons (la partie cliquable réelle du Expander), mettez leur touche support, et lier un événement à eux quand TouchUp est tiré (quand un ascenseur utilisateur leur doigt).

private void TouchUpEvent(object sender, TouchEventArgs e) 
    { 
     if (TouchesOver.Count() == 1) 
     { 
      var temp = sender as System.Windows.Controls.Primitives.ToggleButton; 
      temp.IsChecked = !temp.IsChecked; 
     } 
     e.Handled = false; 
    } 
Questions connexes