WPF 中的分段文本框

2023-11-26

有谁知道免费或商业 WPF 控件可以执行以下操作:

alt text

每个框 X 个字符,并在完成每个框时自动跳到下一个框?类似于为 Microsoft 产品输入许可证密钥的方式。

我认为从头开始做起来并不是特别困难,但如果已经存在一个很好的例子,我想避免重新发明轮子。


WPF 提供了您所需的一切,除了自动跳到下一个控件之外。行为可以提供该功能,结果如下所示:

<Grid>
    <Grid.Resources>
        <local:KeyTextCollection x:Key="keys"/>
    </Grid.Resources>
    <StackPanel>
        <ItemsControl ItemsSource="{StaticResource keys}" Focusable="False">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" Background="AliceBlue"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Text}" Margin="5" MaxLength="4" Width="40">
                        <i:Interaction.Behaviors>
                            <local:TextBoxBehavior AutoTab="True" SelectOnFocus="True"/>
                        </i:Interaction.Behaviors>
                    </TextBox>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</Grid>

以下是 KeyText 和 KeyTextCollection 类(根据口味进行调整):

class KeyText
{
    public string Text { get; set; }
}

class KeyTextCollection : List<KeyText>
{
    public KeyTextCollection()
    {
        for (int i = 0; i < 4; i++) Add(new KeyText { Text = "" });
    }
}

这是实现自动选项卡和焦点选择的行为:

public class TextBoxBehavior : Behavior<TextBox>
{
    public bool SelectOnFocus
    {
        get { return (bool)GetValue(SelectOnFocusProperty); }
        set { SetValue(SelectOnFocusProperty, value); }
    }

    public static readonly DependencyProperty SelectOnFocusProperty = 
        DependencyProperty.Register("SelectOnFocus", typeof(bool), typeof(TextBoxBehavior), new UIPropertyMetadata(false));

    public bool AutoTab
    {
        get { return (bool)GetValue(AutoTabProperty); }
        set { SetValue(AutoTabProperty, value); }
    }

    public static readonly DependencyProperty AutoTabProperty =
        DependencyProperty.Register("AutoTab", typeof(bool), typeof(TextBoxBase), new UIPropertyMetadata(false));

    protected override void OnAttached()
    {
        AssociatedObject.PreviewGotKeyboardFocus += (s, e) =>
        {
            if (SelectOnFocus)
            {
                Action action = () => AssociatedObject.SelectAll();
                AssociatedObject.Dispatcher.BeginInvoke(action, DispatcherPriority.ContextIdle);
            }
        };
        AssociatedObject.TextChanged += (s, e) =>
        {
            if (AutoTab)
            {
                if (AssociatedObject.Text.Length == AssociatedObject.MaxLength &&
                    AssociatedObject.SelectionStart == AssociatedObject.MaxLength)
                {
                    AssociatedObject.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
                }
            }
        };
    }
}

如果您不熟悉行为,请安装 Expression Blend 4 SDK 并添加以下命名空间:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

and add System.Windows.Interactivity到你的项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 中的分段文本框 的相关文章

  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • 如何从WPF中的数据网格中获取单元格的值? [复制]

    这个问题在这里已经有答案了 可能的重复 从 DataGrid 中选择 DataGridCell https stackoverflow com questions 9978119 select datagridcell from datag
  • C# asp.net中WebForm中Winform的Textbox.KeyDown的交替事件是什么?

    在 WinForms 应用程序中 我可以有一个textbox1 keydown事件 但我想在 WebForm ASP NET 中实现同样的事情 那么我该怎么做呢 我需要从数据库中检索有关此事件的数据 您可以使用 onkeydown 事件 然
  • 如何从 XAML 设置 WPF 用户控件属性?

    我试图从 XAML 设置同一用户控件的多个实例的 fill 属性 以便区分它们 我在控件的 C 代码隐藏中使用依赖属性 并在实例化控件时在 XAML 中引用该属性 这是我尝试过的简化示例 首先是用户控件的 XAML
  • 如何从作为 UWP 运行的 WPF 应用程序处理文件激活?

    我有一个WPF我想要处理文件激活的应用程序 我找到了通过向注册表添加特定值来解决问题的解决方案 问题是最终的应用程序应该是UWP应用程序 我正在使用桌面桥来执行此操作 如果应用程序运行为UWP 它无法到达注册表来设置这些特定值 有没有其他方
  • 如何销毁或分离 CollectionView

    我观察到 WPF ItemsControls 的奇怪行为 如果将 ItemsSource 设置为实现INotifyCollectionChanged然后设置ItemsSource为空 则CollectionView创建它是为了向 Items
  • WPF - 路径几何...有没有办法绑定数据属性?

    我有一个ControlTemplate作为 气泡 弹出窗口AdornerLayer给定的控制 它工作正常 但我需要能够计算它应该显示的位置 中间 底部 代替
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 如何将 WPF 大小转换为物理像素?

    将 WPF 与分辨率无关 宽度和高度转换为物理屏幕像素的最佳方法是什么 我正在 WinForms 表单中显示 WPF 内容 通过 ElementHost 并尝试制定一些大小调整逻辑 当操作系统以默认 96 dpi 运行时 我可以正常工作 但
  • 在资源字典中添加字体系列

    我正在使用msdn教程 http msdn microsoft com en us library ms753303 aspx wa wsignin1 0要在我的 Wpf 应用程序中添加 FontFamily 在 csproj 中我有
  • 依赖属性回调不起作用

    我有以下代码 private static readonly DependencyProperty IDProperty DependencyProperty Register ID typeof int typeof DetailData
  • 命令绑定问题。如何启用命令按钮

    我的代码在这里 gt gt public class Player INotifyPropertyChanging string addressBar public string Url get return addressBar set
  • MVVM 消息传递或事件或其他什么选项?

    我在 MainViewModel 中有一个菜单 现在在选择特定的菜单项时我想更新已加载的视图的数据 即 虽然 MainViewModel 中有该 viewModel 的实例 但当我尝试通过该实例调用该方法并更改数据属性时 它不会显示视图中的
  • 以编程方式更改 StackPanel 在 Canvas 上的位置

    我在画布上有堆栈面板 堆栈面板有
  • C#:将音频文件从服务器流式传输到客户端

    我目前正在编写一个应用程序 该应用程序将允许用户安装某种形式的应用程序 可能是 Windows 服务 该应用程序将在其 PC 上打开一个端口 并在硬盘上指定一个特定的目的地 然后能够流式传输 mp3 文件 然后 我将有另一个应用程序 该应用
  • 使用 RenderTargetBitmap 的 WPF 画布区域的快照

    我想在我的应用程序中创建画布区域的快照 我使用 Visual Brush 来获取快照并使用 PngEncoder 保存相同的快照 但生成的 PNG 只是一个空的黑色图像 我不确定问题是与创建的 BitmapSource 还是 PNGEnco
  • WPF KeyGestures - 绑定非字母数字键

    Should be a simple one but I can t work out how to do it Using WPF4 I want to Bind Ctrl to Zoom Out and Ctrl to Zoom In
  • 设置了 Image 和 IsCheckable 的 WPF MenuItem

    我注意到 如果您设置 IsCheckable 并为 MenuItem 设置图像 则在选中该项目时 该图像会消失 是否可以使其与旧的 Net 2 0 类似地工作 以便在检查时图像周围有边框 谢谢 保罗 您需要重新设置 MenuItems 的样
  • WPF 中图像的淡入淡出

    当我更改幻灯片放映等图像源时 如何实现淡入和淡出图像 我的图像从本地和网络加载 并且其数量是可变的 谢谢 您可以编写一个扩展方法 通过动画显示图像来淡出图像Opacity属性设置为 0 然后设置Source属性并最终将不透明度动画回到 1
  • 通过 RDP 使用 WPF 的 Direct2d

    我正在开发一个 C 应用程序 它使用 SharpDx 通过 Direct2d 渲染地图 该地图与 D3DImage 一起显示在 WPF 主机上 在本地计算机上 一切正常 但当我尝试通过远程桌面连接时 D3DImage 会丢失其后备缓冲区 并

随机推荐

  • 迭代 std::deque 时擦除元素时出现分段错误

    为什么下面的代码会崩溃 当我通过反向迭代器进行迭代时应该做什么 那么如何删除单个元素呢 deque q q push back 4 q push back 41 q push back 14 for auto it q begin it q
  • pandas - 两列的直方图?

    我有这个数据 data pd DataFrame from dict r for r in response print data id total 0 213 1 1 194 3 2 205 156 现在 如果我打电话 data hist
  • 带有闪亮工具提示BS的反应式单选按钮

    我想创建一个radioButtons带有工具提示的小部件使用shinyBS 我想要实现的是创建一个带有 3 个按钮的小部件 其中包含不同的信息tooltip 基于此solution它创建了 3 个具有不同 id 值的独立单选按钮 是否可以做
  • intptr_t 是 uintptr_t 的有符号对应项(反之亦然)吗?

    我正在为 add signed MPL 类开发一些测试 将类型转换为其签名的对应项 它的定义如下 template
  • 在python中将url保存为文件名

    我有一个网址 例如 http example com here there index html 现在我想将文件及其内容保存在目录中 我希望文件名是 http example com here there index html 但我收到错误
  • 检测字符串是否为数字的最优雅的方法?

    有没有比这更好 更优雅 和 或可能更快 的方法 boolean isNumber false try Double valueOf myNumber isNumber true catch NumberFormatException e E
  • 是否可以将类内类的实例设置为 null

    是否可以将类内类的实例设置为 null 例如 我可以做这样的事情吗 int main Create a new test object Test test new Test Delete that object This method sh
  • Grit的clone方法未定义?

    我最近开始从事一个使用 git 进行存储并使用 ruby 作为前端的项目 我的脚本的第一个版本使用 ruby git 虽然非常简单 但还可以 当我需要对我的提交和日志进行更具体的工作时 建议我转向坚毅 然而 我在早期遇到了一个障碍 grit
  • 如何在wkwebview中下载文件

    有人请告诉我如何在 iOS wkwebview 中下载文件 我创建了一个 iOS 网络视图应用程序 在我加载的页面中 它有几个下载选项 但是当我单击下载时没有任何反应 注意 我不想创建额外的下载按钮 Since macOS 11 3 and
  • PHP json_encode 数组 0 键的问题

    我在使用 json encode 从数组生成 json 编码字符串时遇到问题 有问题的数组部分如下所示 RatingDistribution Array 11 elements 0 Array 1 element 0 String 3 ch
  • Pandas:根据其他行删除行

    我有一个 pandas 数据框 如下所示 qseqid sseqid qstart qend 2 1 125 345 4 1 150 320 3 2 150 450 6 2 25 300 8 2 50 500 我想根据以下条件删除基于其他行
  • 有没有办法在 iOS 上的 Safari 中禁用向后滑动动画?

    我想在 SPA 上完全禁用向后滑动动画 这将允许我在 SPA 中使用一些滑动手势 目前 在 iOS 上 当触发某些手势时 您往往还会触发向后滑动手势 我找到了关于如何禁用它的上一篇文章 iOS 7 有没有办法禁用 Safari 中的向后和向
  • Gradle 构建过程中使用了哪个已安装的 JDK

    这是我的输出gradle v 在使用包装器的项目中 gradlew v Gradle 5 0 Build time 2018 11 26 11 48 43 UTC Revision 7fc6e5abf2fc5fe0824aec8a0f546
  • 当数据适合行时,VARCHAR 与 TEXT 性能比较

    mysql gt desc temp1 Field Type Null Key Default Extra value varchar 255 YES NULL mysql gt desc temp2
  • 派生类中的私有虚函数[重复]

    这个问题在这里已经有答案了 可能的重复 C 重写公共 私有继承 class base public virtual void doSomething 0 class derived public base private lt Note t
  • 当标志在不同线程中更改时,While 循环不会结束[重复]

    这个问题在这里已经有答案了 我的 Java 程序的 main 方法中有一个 while 循环正在运行 该循环应该一直运行 直到在程序的 keyPressed 方法中将布尔标志变量设置为 true 我将程序作为 KeyListener 添加到
  • 如何修复 xcrun 无法找到 simctl 错误?

    我有 Xcode 6 2 Beta 尝试 xcrun simctl in terminal yields xcrun 错误 无法找到实用程序 simctl 不是开发人员工具或在 PATH 中 我通过输入解决了这个问题 Xcode gt Pr
  • 格式化 SoapUI 项目文件

    我使用 SoapUI 的免费版本 版本 4 6 1 并注意到它的项目文件格式非常糟糕 它的许多元素并不像开发人员维护的大型 XML 文件那样位于专用行或缩进中 这使得区分和合并对源代码控制项目文件的更改变得更加困难 我知道 SoapUI P
  • 如何从工作表中删除公式但保留其计算值[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 询问代码的问题必须对所解决的问题表现出最低限度的了解 包括尝试的解决方案 为什么不起作用以及预期结果 也可以看看 Stack Overflow 问题清单 有关您编写的代码的问题必须描
  • WPF 中的分段文本框

    有谁知道免费或商业 WPF 控件可以执行以下操作 每个框 X 个字符 并在完成每个框时自动跳到下一个框 类似于为 Microsoft 产品输入许可证密钥的方式 我认为从头开始做起来并不是特别困难 但如果已经存在一个很好的例子 我想避免重新发