SL4文本框上的IsTabStop = False

see*_*dge 6 silverlight tabstop silverlight-4.0

我在文本框中将IsTabStop设置为false,我知道这会使控件无法获得焦点,但根据Silverlight论坛,它应该仍然能够接收鼠标事件.我在我的tbxTotal_MouseLeftButtonUp方法中连接了MouseLeftButtonUp事件和断点,并且它在调试期间永远不会被命中.SL论坛中的线程现在已经很老了,所以也许这在某个地方更新了.我想要一个无法选项卡的文本框,但仍然可以编辑.真的应该这么难吗?

ben*_*wey 3

我没有意识到这一点,但情况似乎如此,此外,我似乎无法让 MouseLeftButtonUp 触发。MouseLeftButtonDown 确实会触发,并且使用它您可以进行此黑客攻击。

<TextBox IsTabStop="False" MouseLeftButtonDown="TextBox_MouseLeftButtonDown" />
Run Code Online (Sandbox Code Playgroud)

然后在代码中你可以像这样处理事件。

    private void TextBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var textBox = ((TextBox) sender);
        textBox.IsTabStop = true;
        textBox.Focus();
        textBox.IsTabStop = false;
    }
Run Code Online (Sandbox Code Playgroud)

将其包装在 CustomControl 中可能是值得的

public class FocusableTextBox : TextBox
{
    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
    {
        if (!IsTabStop)
        {
            IsTabStop = true;
            Focus();
            IsTabStop = false;
        }

        base.OnMouseLeftButtonDown(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 另外,因为我的文本框位于树视图中,所以发生了一些奇怪的事情。当我单击文本框时,鼠标被按下,我将 IsTabStop 设置为 true,为其提供焦点,在 LostFocus 中,我将 IsTabStop 设置为 false。但是,文本框所在的树视图项目获得焦点,从而取消了我刚刚所做的操作。树视图项将 IsTabStop 设置为 false,因此我发现它可以接收焦点很奇怪,但我也解决了这个问题。在我的文本框 LostFocus 事件中,我实际上再次将焦点集中到我的文本框,然后直接将 IsTabStop 设置为 false。 (2认同)