2010-06-04 55 views
2

我需要强制Silverlight提交聚焦元素(在我的情况下是TextBox,但可能是任何东西)的代码。在WPF中我使用在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 2010-06-04 12:34:03

+0

@ jeffn825:您可以使用VisualTreeHelper遍历元素的子元素:http://msdn.microsoft.com/en-us/library/ms635657(v=VS.95).aspx,但我怀疑这是必需的。一旦用户点击任何地方或标签,所有来源应该自动更新。 – 2010-06-04 13:03:32

+0

似乎没有发生。具体来说,我有一个用户输入文本框,然后他们击中输入。这应该以编程方式使用文本框中的信息启动新表单...但文本框似乎没有提供该值。虽然有很多文本框,所以我不知道用户在输入时输入了哪个文本框... – Jeff 2010-06-04 14:13:46