Je ne pense pas qu'il est possible, au moins pas sans code supplémentaire ... boilerplate WPF et Windows Forms ont un modèle complètement différent, et la propriété Target
ne sont pas conçus pour se référer à des contrôles WinForms. Au lieu de cela, je pense que vous devriez utiliser une implémentation WPF de MaskedTextBox
, comme this one (vous pouvez trouver beaucoup d'autres exemples avec Google). Utiliser les contrôles WinForms dans une application WPF est rarement une bonne idée si vous pouvez l'éviter ...
EDIT: Je viens de vérifier le doc: il n'est certainement pas possible de faire ce que vous voulez, car le type de la propriété Label.Target
est UIElement
, et les contrôles WinForms ne sont manifestement pas UIElement
s ...
MISE à JOUR: OK, j'ai mal lu votre code ... vous faites référence à la WindowsFormsHost
, qui est un UIElement
. Qui a voté pour moi était faux aussi ;-)
Je pense que le problème est que le WindowsFormsHost
prend la mise au point lorsque vous appuyez sur Alt-S, pas le MaskedTextBox
. Voici une solution rapide:
XAML:
<WindowsFormsHost
Name="tbStartTime"
TabIndex="13"
GotFocus="tbStartTime_GotFocus">
<wf:MaskedTextBox Name="wfStartTime" Mask="90:00" />
</WindowsFormsHost>
code-behind:
private void tbStartTime_GotFocus(object sender, RoutedEventArgs e)
{
tbStartTime.Child.Focus();
}
Quoi qu'il en soit, mon conseil précédent est toujours pertinent: vous feriez mieux d'utiliser un WPF MaskedTextBox ...
Cela doit être une erreur de l'équipe WPF. C'est une chose si évidente - si vous vous concentrez sur un WindowsFormsHost, quoi d'autre devrait se produire, à part que le contrôle enfant devienne ciblé? Pourtant, je suis content qu'il existe une solution de contournement d'une ligne. –
IMO, une solution de contournement vraiment propre n'impliquerait pas l'écriture de code derrière ... celui-ci pourrait facilement être enveloppé dans une propriété attachée réutilisable –