单击禁用按钮后,如何防止TextBox或RichEditBox失去焦点?

时间:2018-10-12 01:47:14

标签: c# wpf xaml uwp

标题说明了一切:“如何在单击禁用的按钮后防止TextBox或RichEditBox失去焦点?”

我尝试将AllowFocusOnInteraction设置为false,但这仅在启用按钮时有效。例如,如果我有一个用于将文本设置为粗体或斜体的按钮,则该属性很好用。编辑器不会失去焦点,一切都很棒。但是,如果我要禁用该按钮然后单击它,则编辑器将失去焦点。这给我带来了几个新问题。希望对此有所帮助。谢谢。

还要注意,我有一个UWP应用程序。不确定是否重要。

2 个答案:

答案 0 :(得分:1)

好的,所以我想出了解决此问题的正确方法。 因此,粗体,斜体和下划线格式按钮都在我的自定义工具栏中。我要记住的是,只要该元素(例如Grid元素)具有可拦截点击的背景,就可以单击大多数xaml元素并因此触发PointerPressed事件。如果背景是透明的,则不会触发PointerPressed事件。

所以,我确保工具栏设置了纯色背景,然后在其上设置了PointerPressed事件。因此,每当您单击工具栏上的那个事件都将触发,我只需将e.Handled属性设置为true即可;

现在,因为禁用了工具栏上的按钮,所以指针单击将转到可视化树中您单击的按钮下方的下一个可单击元素,这是我的工具栏(现在有背景)。到达工具栏后,在事件处理程序中将e.Handled事件设置为true会告诉系统进一步执行任何操作,因此RichEditBox保持其焦点。

我知道我在这里的写作很草率,但是我现在有点匆忙,所以我很可能会回来整理我的答案。希望这对某人有帮助。

答案 1 :(得分:0)

将禁用的按钮包装在“边框”或“网格”中。

<Grid Tapped="DisabledButtonTapped">
    <Button IsEnabled="false"/>
</Grid>

现在借助此网格上的点击方法,您可以将焦点设置回RichEditBox。

private void DisabledButtonTapped(object sender, object args)
{
    MyRichEditBox.Focus(FocusState.Programmatic);.//use the x:Name of your richeditbox in place of "MyRichEditBox".
}