2010-06-04 2 views
2

Мне нужен код, который заставит Silverlight зафиксировать сфокусированный элемент (в моем случае TextBox, но это может быть что угодно). В WPF я используюCommit Focused Element in Silverlight

public static void CommitFocusedElement() { 
    UIElement element = Keyboard.FocusedElement as UIElement; 
    if (element != null) { 
     TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next); 
     FocusNavigationDirection directionBack = FocusNavigationDirection.Previous; 
     if (!element.MoveFocus(request)) {      
      request = new TraversalRequest(FocusNavigationDirection.Previous); 
      directionBack = FocusNavigationDirection.Next; 
      element.MoveFocus(request); 
     } 
     if (element.Focusable) 
     { 
      element.Focus(); 
     } 
     else 
     { 
      element.MoveFocus(new TraversalRequest(directionBack)); 
     } 
    } 
} 

Но некоторые части этого кода не совместимы с Silverlight. Может ли кто-нибудь указать мне на альтернативу Silverlight?

ответ

1

Я предполагаю, что вы хотите обновить источник привязки. Если вы этого не сделаете, вы, вероятно, должны это сделать.

BindingExpression expression = textBox1.GetBindingExpression(TextBox.TextProperty); 
expression.UpdateSource(); 
+0

Спасибо. Если я не знаю точного элемента, который я хочу обновить, есть ли способ перечислить все элементы активного элемента управления/окна? – Jeff

+0

@ jeffn825: вы можете перебирать дочерние элементы элемента с помощью VisualTreeHelper: http://msdn.microsoft.com/en-us/library/ms635657(v=VS.95).aspx, но я сомневаюсь, что это необходимо. Все источники должны обновляться автоматически, как только пользователь нажимает или сохраняет вкладки в любом месте. –

+0

Кажется, что это не происходит. В частности, у меня есть пользователь, вводящий текстовое поле, затем они нажимают кнопку enter. Это должно программно запускать новую форму, используя информацию из текстового поля ... но текстовое поле, похоже, не зафиксировало значение. Тем не менее, есть много текстовых полей, поэтому во время выполнения я не знаю, в каком текстовом поле вводился пользователь, когда они нажимали кнопку ввода ... – Jeff