This is a mirror of official site: http://jasper-net.blogspot.com/

KeyDown в Silverlight не работает с первого раза

| Tuesday, November 16, 2010
Почему не нажимается кнопка
Понятно, что надо сделать так, чтобы при старте фокус был установлен как на плагин silverlight, так и на текущий контрол. В моем случаи это TrainingGameScreen, контрол, который является представлением (View). Надеюсь, приведенный код не требует пояснений:

   public partial class TrainingGameScreen : UserControl
   {
       public TrainingGameScreen()
       {
           InitializeComponent();
           Loaded += TrainingGameScreen_Loaded;
       }

       private void TrainingGameScreen_Loaded(object sender, RoutedEventArgs e)
       {
           System.Windows.Browser.HtmlPage.Plugin.Focus();
           this.Focus();
       }

   }
Обычно этого было достаточно и в предыдущей версии программы всё сработало как надо. А вот в новой версии, которая уже написана на NET 4.0 пришлось не мало повозиться, чтобы отыскать почему фокус не устанавливается. Оказывается, чтобы всё заработало именно так, как планировалось, надо установить в XAML у контрола верхнего уровня, например UserControl, свойство IsTabStop в True.

      <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
            xmlns:clb="http://schemas.calabonga.com/"
            xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
            x:Name="userControl"
            mc:Ignorable="d"
            IsTabStop="True">
               ...
       </UserControl>
Вот теперь реально всё правильно работает, и даже с первого раза. Вроде мелочь, а приятно!

Как нажать кнопку в MVVM
И в заключении статьи напиши, как нажатие кнопок обработать на стороне ViewModel. Тут неоценимую помощь мне оказала библиотека в которой есть EventToCommand, которая в свою очередь может принимать параметры и не просто, а параметры события привязки. В моем приложении уже есть команда, которые отрабатывают при нажатии на клик пользователя по кнопкам при выборе правильного ответа:

       #region команда MakeAnswerCommand

       /// <summary>
       /// Команда MakeAnswerCommand обрабатывает нажатие пользователя на кнопку.
       /// </summary>
       public DelegateCommand<string> MakeAnswerCommand

Read more: Мусорка - найди лучшее!

Posted via email from .NET Info

0 comments: