【问题标题】:How to make password box non-editable in wpf如何在wpf中使密码框不可编辑
【发布时间】:2013-04-12 12:56:40
【问题描述】:

我需要在 wpf 中将密码框设为不可编辑。 我用
IsEnabled = false

但它影响了我的风格,因此出现了一些模糊效果...... 有没有其他方法可以做到这一点?

【问题讨论】:

  • 很抱歉,您需要一个不可编辑的密码框。没有 isReadOnly。也许将它绑定到没有 Set 的 Get。
  • 不能绑定 PassWord 属性,因为它不是依赖属性。

标签: c# .net wpf


【解决方案1】:

我知道这已经两年了,但我有同样的需求并以这种方式解决了它: 这两个属性的组合都设置为 false,将阻止在控件中输入/编辑,而不会影响您想要的样式: 可聚焦,IsHitTestVisible

【讨论】:

  • 很好的答案!允许我在 MVVM 中完成此操作
【解决方案2】:

您可以处理PreviewTextInput 事件,阻止用户输入文本。像这样:

Xaml:

<PasswordBox PreviewTextInput="HandleInput"/>

代码隐藏:

private void HandleInput(object sender, TextCompositionEventArgs e) {
  e.Handled = true;
}

【讨论】:

  • 不会阻止“粘贴”
  • @NSGaga 本人正在寻求有关只读密码框的帮助。我想要处理粘贴问题,您可以添加一个 PreviewKeyDown 事件,该事件还设置 e.Handled = true; 然后在 XAML 中使用 ContextMenu="{x:Null} 禁用 PasswordBox ContextMenu@
  • @codeSwearing 我只是在吹毛求疵:)。说真的,你可能是对的,但我认为这不是最好的方法,因为它导致许多道路开放,键盘,鼠标和其他输入事件等。当我看到这个时,我不确定为什么 OP首先需要这个,但是,嘿,我宁愿将“禁用”密码框的样式更改为启用,处理触发器等。或者按照建议(通过附加属性)不使用“设置”进行获取或类似的东西。
【解决方案3】:

一种解决方案是制作自定义功能来模仿IsReadOnly

有几件事需要注意 - 例如。 clipboard pasting 也。

您将通过定义一些附加属性(例如IsPasswordReadOnly 或相同)来获得similar behavior - 这将解决所有需要的问题。

这是一个很好的开始示例 - 我认为它也适用于密码框 - 但我还没有尝试过,你必须自己测试一下。

Readonly textbox for WPF with visible cursor (.NET 3.5)

您必须将对 TextBox 的引用替换为 PasswordBox,将其重命名为 IsReadOnly - 我认为其余部分可能会起作用。

而你使用它就像...

<PasswordBox my:AttachReadOnly.IsReadOnly="True" />

【讨论】:

    【解决方案4】:

    很简单..

    在您的 XML 中为 PreviewTextInput 设置事件处理程序,如下所示:

        PreviewTextInput="PasswordBoxOnPreviewTextInput"
    

    在那个方法中:

        private void PasswordBoxOnPreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            if (m_DisablePasswordBox)
                e.Handled = true;
        }
    

    它现在会阻止你输入任何内容:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      相关资源
      最近更新 更多