Как я даю фокус текстового поля в Silverlight?

Вы можете добиться этого с помощью Jquery и позвоните по нижеприведенной ссылке при загрузке страницы.

var htmlhead = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';
var$g=jQuery.noConflict();$g(function({$g('head').append(htmlhead);$g('head').append('<linkrel="stylesheet"href="yourstaticresources"type="text/css"media="all"/>');$g('body').append('Any dialog box');$g("#dialog").dialog({autoOpen: true,buttons: {'{!$Label.Yes}': function() {ifYes();},'{!$Label.No}': function() {$g(this).dialog("close");}}});})} else{ifNo();}}    

Откроется диалоговое окно с Yes or No. Обрабатывайте свою логику соответственно

32
задан Ben Griswold 24 September 2008 в 00:05
поделиться

8 ответов

Я нашел это на silverlight.net и смог заставить это работать на меня путем добавления вызова к Системе. Windows. Браузер. HtmlPage. Плагин. Фокус () до вызова RegularTextBox. Фокус ():

   private void UserControl_Loaded(object sender, RoutedEventArgs e)
   {        
      System.Windows.Browser.HtmlPage.Plugin.Focus();
      RegularTextBox.Focus();
   }
41
ответ дан 27 November 2019 в 20:04
поделиться

Вы уверены, что действительно не получаете фокус? Существует известная ошибка в бете 2, где Вы получите фокус и сможете ввести, но Вы не получите каре или границу. Обходное решение должно назвать UpdateLayout () на текстовом поле прямо перед вызовом Фокуса ().

2
ответ дан 27 November 2019 в 20:04
поделиться

Я забыл одну вещь... Я не нашел способ вызвать фокус к Вашему приложению Silverlight на странице надежно (это будет работать над некоторыми браузерами а не над другими).

, Таким образом, может случиться так, что само приложение Silverlight не фокусируется. Я обычно обманываю пользователя в нажатие кнопки или чего-то подобного, прежде чем я начну ожидать, что ввод с клавиатуры удостоверится, что приложение Silverlight фокусируется.

0
ответ дан 27 November 2019 в 20:04
поделиться

Я попытался бы добавить DispatcherTimer на событии UserLoaded, которое выполняет метод Фокуса несколько миллисекунд после того, как целое управление загрузилось; возможно, проблема там.

2
ответ дан 27 November 2019 в 20:04
поделиться

Вы кодируете для установки фокуса, корректно с тех пор, если Вы добавляете кнопку, которая называет тот же код, это работает отлично:

<StackPanel Width="150" VerticalAlignment="Center">
    <TextBox x:Name="RegularTextBox" IsTabStop="True" />
    <Button Click="UserControl_Loaded">
        <TextBlock Text="Test"/>
    </Button>
</StackPanel>

, Таким образом, я принимаю, это - что-то, чтобы сделать с Фокусом () требование некоторого взаимодействия с пользователем. Я не мог заставить это работать с Событием mouseMove на UserControl, но помещением события KeyDown для установки работ фокуса (хотя шаблон не обновляет к сфокусированному шаблону).

Width="400" Height="300" Loaded="UserControl_Loaded" KeyDown="UserControl_KeyDown">

Походит на ошибку мне....

1
ответ дан 27 November 2019 в 20:04
поделиться

Для приложений вне браузера System.Windows.Browser.HtmlPage.Plugin.Focus (); не существует.

См. мой вопрос здесь для других идей.

1
ответ дан 27 November 2019 в 20:04
поделиться

Спасибо Santiago Palladino Dispatcher работал для меня идеально. Что я делаю:

this.focus (); потом Dispatcher.begininvoke (() => {tbnewtext.focus ();});

10
ответ дан 27 November 2019 в 20:04
поделиться
Plugin.Focus(); 

у меня не работали.

Вызов

 Dispatcher.BeginInvoke(() => { tbNewText.Focus();});

из события загрузки сработал.

23
ответ дан 27 November 2019 в 20:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: