【问题标题】:How can I make textbox not editable when I click out of it?当我点击它时,如何使文本框不可编辑?
【发布时间】:2021-08-31 06:45:24
【问题描述】:

我有一个 TreeView,里面是 TextBoxes。
它看起来像这样:
我正在努力实现:

  • 当我点击另一个复选框时应该失去焦点
  • 当我点击已编辑的复选框时,它应该失去焦点,而不是保持可编辑状态。

我可以通过按 Enter 或 Tab 键(或任何其他键)来实现类似的效果。

private void OnModuleNameEditKeyDownHandler(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return || e.Key == Key.Tab)c
    {
        ModuleName.Visibility = Visibility.Visible;
        ModuleNameEdit.Visibility = Visibility.Collapsed;
    }
}

有办法吗? 功能是当我双击 TextBox 时,它变为可编辑,但我希望,当单击超出复选框范围时,在再次双击它之前不对其进行编辑。

【问题讨论】:

  • 如果没有带有 UI 元素布局的至少部分 XAML 代码,将无法回答您的问题。 ModuleName、ModuleNameEdit 的元素是什么?它们与 IsReadOnly 有什么关系?为什么更改 IsReadOnly 会更改项目的可视化?
  • 你为什么不能通过 LostFocus 和 DoubleClick 事件来做到这一点?
  • @JonathanWillcock 如何检查文本框何时失去焦点(顺便说一句,有逻辑焦点和键盘焦点我不明白)所以我可以使其 Visibility.Collapsed ?
  • 在 XAML 中为 TextBox 输入 "LostFocus=" ,它会提示您创建一个新的事件处理程序。

标签: c# wpf controls


【解决方案1】:

创建静态变量来存储工作节点(UIElement/Textbox)。并尝试在键盘焦点丢失时设置此事件。

静态变量:

public static TextBox CurrentTextBox = null;

在鼠标双击事件中:

{ 
  CurrentTextBox = sender as TextBox;
  CurrentTextBox.IsReadOnly = false;
  CurrentTextBox.IsVisible = true;
}

在键盘焦点丢失事件中:

{
  CurrentTextBox.IsReadOnly = true;
  CurrentTextBox .IsVisible = false;
  CurrentTextBox = null;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多