Я в ситуации, когда я пытаюсь создать уведомление, когда я пытаюсь перейти от одного TabItem к другому, и я пытаюсь сделать это с помощью функции LostFocus().
На самом деле мой каждый TabItem состоит из TextBlock и некоторых данных, написанных на нем. Поэтому уведомление о переключении я пытаюсь добиться следующим образом:
StackPanel sp = new StackPanel()
{
Orientation = Orientation.Horizontal
};
sp.Children.Add(generateTextBlockContaini());
TabItem tbi = new TabItem();
tbi.Header = sp;
tbi.LostFocus +=(o,e) =>
{
//MesssagePop up
MessageBox.Show("Hurrey tabItem changed");
};
Возникает проблема:
(1) Он отлично работает, но мне нужно щелкнуть один раз на текстовом блоке, когда я переключусь на другой TabItem, чтобы всплывать это сообщение (потому что его фокус не установлен, если я не нажимаю). Есть ли способ установить фокус текстового блока в silverlight 5?
(2) Даже если он установлен, он будет звонить бесконечно, потому что я заменил текстовый блок на текстовое поле, и я использовал Focus(), и он вызывал бесконечно.
Для вашего конкретного случая вы можете использовать события MouseLeave
и MouseEnter
вместо LostFocus
и GotFocus
. Эти события будут срабатывать, не требуя от пользователя щелчка на элементе управления внутри вашего TabItem
.
Обычно TabItems используются вместе с TabControls. Это обеспечивает свойства и события для изменения вкладок.