【问题标题】:How do I prevent TextBox or RichEditBox from losing focus after clicking on a disabled button?单击禁用按钮后,如何防止 TextBox 或 RichEditBox 失去焦点?
【发布时间】:2018-10-12 01:47:14
【问题描述】:

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

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

另外请注意,我有一个 UWP 应用。不过,不确定这是否重要。

【问题讨论】:

    标签: c# wpf xaml uwp


    【解决方案1】:

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

    Sooo,我确保我的工具栏设置了纯色背景,然后在其上设置了 PointerPressed 事件。因此,每当您单击工具栏时,该事件就会触发,我只需将 e.Handled 属性设置为 true;

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 感谢您的回复。我会考虑使用你的方法,但目标是找到不那么“hacky”的东西来解决问题,哈哈。但如果它有效,那么......现在我想它总比没有好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 2018-12-05
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多