WPF: заставить свойство Target ссылаться на элемент управления в WindowsFormsHost - PullRequest
2 голосов
/ 16 сентября 2009

В WPF вы можете назначить метке мнемонику и указать ей, какой элемент управления активировать с помощью свойства "Target".

Это не работает, если целью является WindowsFormsHost. Есть ли известное решение для этого?

Вот пример. Я пытаюсь заставить ALT-S активировать замаскированное текстовое поле.

<Label 
   Width="Auto" 
   Target="{Binding ElementName=tbStartTime}" 
   TabIndex="12">
   _Start Time:
</Label>
<WindowsFormsHost 
    Name="tbStartTime" 
    TabIndex="13">
 <wf:MaskedTextBox Name="wfStartTime"  Mask="90:00" />
/WindowsFormsHost>

1 Ответ

2 голосов
/ 16 сентября 2009

Я не думаю, что это возможно, по крайней мере, без какого-либо дополнительного шаблонного кода ... WPF и Windows Forms имеют совершенно другую модель, а свойство Target не предназначено для ссылки на элементы управления WinForms.

Вместо этого, я думаю, вы должны использовать реализацию WPF MaskedTextBox, например , эту (вы можете найти много других примеров в Google). Использование элементов управления WinForms в приложении WPF редко бывает хорошей идеей, если вы можете избежать этого ...

РЕДАКТИРОВАТЬ: Я только что проверил документ: определенно невозможно сделать то, что вы хотите, потому что тип свойства Label.Target равен UIElement, а элементы управления WinForms явно не UIElement s ...


ОБНОВЛЕНИЕ: ОК, я неправильно прочитал ваш код ... вы ссылаетесь на WindowsFormsHost, который является UIElement. Тот, кто голосовал за меня, тоже был неправ; -)

Думаю, проблема в том, что WindowsFormsHost фокусируется при нажатии Alt-S, а не MaskedTextBox. Вот быстрый обходной путь:

XAML:

<WindowsFormsHost 
    Name="tbStartTime" 
    TabIndex="13"
    GotFocus="tbStartTime_GotFocus">
 <wf:MaskedTextBox Name="wfStartTime"  Mask="90:00" />
</WindowsFormsHost>

Код-позади:

    private void tbStartTime_GotFocus(object sender, RoutedEventArgs e)
    {
        tbStartTime.Child.Focus();
    }

В любом случае, мой предыдущий совет по-прежнему актуален: вам лучше использовать WPF MaskedTextBox ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...