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;
}