首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在wpf命令中传递textbox KeyEventArgs和TextBox值

在WPF命令中传递TextBox的KeyEventArgs和值,可以通过以下步骤实现:

  1. 创建一个自定义命令类,继承自ICommand接口,并实现CanExecuteExecute方法。例如:
代码语言:txt
复制
public class MyCommand : ICommand
{
    public event EventHandler CanExecuteChanged;

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        // 在这里处理命令逻辑
        if (parameter is Tuple<KeyEventArgs, string> tuple)
        {
            KeyEventArgs e = tuple.Item1;
            string text = tuple.Item2;

            // 处理KeyEventArgs和TextBox值
            // ...
        }
    }
}
  1. 在XAML中,将TextBox的KeyDown事件与命令绑定,并传递KeyEventArgs和TextBox的值作为参数。例如:
代码语言:txt
复制
<TextBox x:Name="myTextBox" Text="{Binding MyText}" KeyDown="TextBox_KeyDown">
    <TextBox.InputBindings>
        <KeyBinding Key="Enter" Command="{Binding MyCommand}">
            <KeyBinding.CommandParameter>
                <Tuple x:TypeArguments="KeyEventArgs, String">
                    <KeyEventArgs xmlns:sys="clr-namespace:System;assembly=mscorlib" />
                    <sys:String>{Binding ElementName=myTextBox, Path=Text}</sys:String>
                </Tuple>
            </KeyBinding.CommandParameter>
        </KeyBinding>
    </TextBox.InputBindings>
</TextBox>
  1. 在ViewModel中,创建一个公共属性来表示命令,并在构造函数中初始化该属性。例如:
代码语言:txt
复制
public class MyViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public ICommand MyCommand { get; }

    private string _myText;
    public string MyText
    {
        get { return _myText; }
        set
        {
            _myText = value;
            OnPropertyChanged(nameof(MyText));
        }
    }

    public MyViewModel()
    {
        MyCommand = new MyCommand();
    }

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

通过以上步骤,当用户在TextBox中按下Enter键时,命令将被执行,并且KeyEventArgs和TextBox的值将作为参数传递给命令的Execute方法。在Execute方法中,你可以根据需要处理KeyEventArgs和TextBox的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF做一个简易浏览器

WPF虽然出来也有大概十来年了,但是它的很多设计思想还是非常先进的,配合C#这门语言的话更加顺手。WPF的界面设计程序功能完全解耦,也就是说设计界面编写程序功能可以互不干扰的同时进行。...当然需要说明,这篇文章不是讲如何实现浏览器的,而是利用WPF的一个浏览器控件,让大家了解一下WPF的一些简单功能。由于WPF组件庞大,没办法在一篇文章详细介绍。...这里只设置了按钮和文本框的宽度外边距,外边距的4个分别代表上、左、右、下外边距。如果不在这里统一设置,那么就要针对每个按钮设置一次外边距,这是件很麻烦的事情。...WPF的控件都包含了大量事件,可以处理鼠标、键盘、触屏等等各种事件,而且仅需要在XAML代码添加一点代码就可以将事件处理程序绑定起来。...下面代码的ClickKeyDown就是两个事件,用于处理单击鼠标键盘按键。

3.5K50
  • WPF 将控件放入到 UserControl 里获取 HwndSource 为空的情况

    内容 如果对某个 Visual 使用 PresentationSource.FromVisual 方法获取 HwndSource 内容,获取到的返回是空。...,什么时候调用 PresentationSource.FromVisual 返回 null 空 对于 WPF 里定义的几乎所有的容器控件, Grid 等,即使此容器控件被设置为 Visibility...分别放入到 Grid UserControl 里面,将 Grid UserControl 设置为 Visibility="Collapsed" 不可见 在 Loaded 事件里面,分别从 TextBox1... TextBox2 获取 HwndSource 内容,代码如下 public MainWindow() { InitializeComponent...gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init git remote

    1.4K30

    WPF 自定义 TextBoxView 的 Margin 大小

    如何自定义这个 先来写一个简单的程序告诉大家这个问题,创建一个空白 WPF 程序,在里面添加一个 TextBox 设置 TextBox 居中 <TextBox Width="100"...可以看到现在的 TextBox 光标 TextBox 的左边有 2 像素的距离,通过 Snoop 可以看到这个 TextBoxView 的 Margin 是 2,0,2,0 而且无法直接修改 ?...从 WPF 的源代码可以看到 TextBoxView 是 internal 的也就是无法直接修改 Style 在构造函数设置了 Margin 的,这里的 CaretElement.BidiCaretIndicatorWidth...="Center" VerticalAlignment="Center"> 因为在 TextBox 里面存在 TextBoxView 的偏移,使用相反的可以让...TextBoxView 的偏移取消,这里的 Padding 需要根据自己的需要设置 如果设置 Padding 的负数比较小, -500 就可以在 TextBox 的外面输入 ?

    1.4K20

    WPF 自定义 TextBoxView 的 Margin 大小

    WPFTextBox 里有 TextBoxView 用来渲染 TextBox 内容,但是在 TextBox 里面的 TextBoxView 是不能直接设置而且默认的 Margin 是 2,0,2,0...如何自定义这个 先来写一个简单的程序告诉大家这个问题,创建一个空白 WPF 程序,在里面添加一个 TextBox 设置 TextBox 居中 <TextBox Width="100"...光标 TextBox 的左边有 2 像素的距离,通过 Snoop 可以看到这个 TextBoxView 的 Margin 是 2,0,2,0 而且无法直接修改 从 WPF 的源代码可以看到 TextBoxView...="Center" VerticalAlignment="Center"> 因为在 TextBox 里面存在 TextBoxView 的偏移,使用相反的可以让...TextBoxView 的偏移取消,这里的 Padding 需要根据自己的需要设置 如果设置 Padding 的负数比较小, -500 就可以在 TextBox 的外面输入 如果这里的 TextBox

    58720

    深入浅出话属性

    当在TextBox1输入Darren的时候,出现的结果上一个图片一样。...我们怎么知道获取的来自于哪里呢?原来WPF对依赖属性的读取是有优先级控制的,先后顺序如下: (1)WPF属性系统强制性。 (2)由动画过程控制的。...DependencyObjectDependencyProperty是WPF属性系统的核心。...这一种理念在传统的.net系统(ASP.NET,wiNFORM)是不曾出现的,它是WPF的创新并广泛使用的(后面的路由事件,系统命令都会用到这样的理念),同时我们也理解为什么WPF在性能上还不尽人意,...现在我们已经知道如何在XAMLC#代码中直接为附加属性赋值,不过别忘了,附加属性的本质是依赖属性---附加属性也可以使用Binding依赖在其它对象的数据上。

    92330

    《深入浅出WPF》学习笔记之深入浅出话Binding

    BindingMode类型的枚举:TwoWay、OneWay、OnTime、OneWayToSourceDefault。   ...上述Slider示例,在TextBox输入一个,然后按Tab键(TextBox丢失焦点),Slider的手柄会自动跳到相应的位置。...UpdateSourceTrigger:属性控制改变时机。枚举PropertyChanged、LostFocus、ExplicitDefault ? ?...在XAML为外层StackPanel的DataContext赋了,内层TextBox的Binding只指定了Path,没有指定Source,这时TextBox的Binding会自动向UI元素树的上层寻找可用的...其实,“Binding沿着UI元素树网上找”只是WPF给我们的一个错觉,实际是因为DataContext是一个“依赖属性”,当控件的依赖属性没有显式赋值时,依赖属性会沿UI元素树向下传递

    5.6K10

    WPF MVVM实例一

    当类实现该接口后,便可以向执行绑定的客户端发出某一属性已更改的通知。...便与命令进行了绑定。...在WinForm开发,我们一般会直接操作界面的元素(TextBox1.Text=“aaa”),这样一来,界面变化后,后端逻辑代码也需要做相应的变更。...在WPF中使用数据绑定机制,当数据变化后,数据会通知界面变更的发生,而不需要通过访问界面元素来修改,这样在后端逻辑代码也就不必操作或者很少操作界面的元素了。...使用MVVM,可以很好的配合WPF的数据绑定机制来实现UI与逻辑代码的分离,MVVM的View表示界面,负责页面显示,ViewModel负责逻辑处理,包括准备绑定的数据命令,ViewModel通过View

    72530

    《深入浅出WPF》——模板学习

    然而,WPF模板的内涵远比这个要深刻。 Binding基于Binding的数据驱动界面是WPF的核心部分,依我看,WPF最精彩的部分就是模板。...答案是:程序的数据结构算法——Binding传递的是数据,事件参数携带的也是数据;方法委托(Delegate,可以理解为一串要执行的方法)的调用时算法,事件传递消息也是算法…数据在内存里就是一串串数字或字符...以往GUI开发技术(WinFormsASP.NET),控件内部的逻辑和数据是固定的,程序员不能改变;对于控件的外观,程序员能做的改变也非常有限,一般也就是设置控件的属性,想改变控件的内部结构是不可能的...(简单讲,就是显示功能难以拆分) 在WPF,通过引入模板(Template)微软将数据算法的“内容”与“形式”解耦了。...TextBoxButton最简单,我们从这两个控件开始。运行Blend,新建一个WPF项目,先把窗体的背景色改为线性渐变,再在窗体的主容器Grid里面画上两个TextBox一个Button。

    4.8K10

    WPF 双向绑定到非公开 set 方法属性在 NET 45 NET Core 行为的不同

    本文记录 WPF 在 .NET Framework 4.5 .NET Core 3.0 或更高版本对使用 Binding 下的 TwoWay 双向绑定模式绑定到非公开的 set 属性上的行为变更 在....NET Framework 4.5 下,可以使用 Binding 下的 TwoWay 双向绑定模式,绑定到非公开的 set 属性, private set 私有设置的属性上,实现双向更改,效果上公开的...> 以上代码是能在 .NET Framework 4.5 预期工作。...在 .NET Core 3.0 的更新里,也提到了这个坑,参阅 August Update for WPF on .NET Core 3.0 · Issue #1731 · dotnet/wpf 此问题我也报告给官方...gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init git remote

    1.2K20

    WPF自学入门(七)WPF 初识Binding

    今天记录一下Binding的基础具体的使用方法,说起这个Binding,在WPF,Binding是很重要的特征,在传统的Windows软件来看,大多数都是UI驱动程序的模式,也可以说事件驱动程序...这里有3个控件,Slider,TextBox,Label,其中TextBoxLabel都作为目标,Slider都作为数据源,把Slider交由两个控件体现,移动滑块,TextBox会自动显示Value...如果把TextBox修改成其他的,滑条位置没有改变,字体大小也没有改变,这是什么回事呢?当TextBox失去焦点的时候,就会发生相应的改变了。...Binding是一条高速公路,那么为了提高数据传递的合法性有效性,我们要在这条高速公路建立起一系列的关卡,有的用来转换数据,有的用来校验数据,下面就说一下Binding对数据的校验转换。...上面我们提到的问题实际上就是doublestirng类型相互转换的问题,因为处理起来比较简单,所以WPF类库就自己帮我们做了,但有些数据类型转换就不是WPF能帮我们做的了,当遇到这些情况,我们只能自己动手写

    1.6K30

    WPF 切换主题使用 luna 复古版本

    本文告诉大家如何在 WPF 里面使用 luna 等复古主题 今天在 lsj 说他准备优化 WPF 的程序集时,准备删除 luna 等程序集时,找到了一段有趣的注释,发现在 WPF 里面可以通过一些有趣的反射的方法修改主题...themeNameField.SetValue(null, themeName); } 为了展示界面效果,我添加了如下界面 <Button Margin...string _themeName; private static string _themeColor; } 也就是以上的写法是符合预期的 本文以上的测试代码放在github ...gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init git remote

    54210

    UWP WinRT 使用系统自带的分词库对字符串文本进行分词

    框架, WPF 或 WinForms 或者是 dotnet 控制台都是可以像接入 Win32 一样接入 WinRT 平台。...详细请参阅 我的博客导航 的 WinRT 部分 本文将采用 UWP 作为例子,在 WPF 下调用的 API 也是相同的,许多代码都可以直接拷贝,不需要做更改 先新建一个 UWP 应用,由于本次采用的是...可以传入的 可以传入的语言文化字符串请参阅 BCP-47 标准文档 创建的过程,由于不同的用户设备可能安装有不同的分词库,可能传入的语言文化对应的分词库是在当前设备上找不到的。...// 证明本机安装了传入语言的分词库 } 如果传入的语言文化在本机没有找到,那么 ResolvedLanguage 将会是 “und” 字符串的。...以上就是 WinRT 使用系统自带的语言文化分词库对文本进行分词的方法 本文以上代码放在github gitee 欢迎访问 可以通过如下方式获取源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹

    60510

    【愚公系列】2023年11月 WPF控件专题 Popup控件详解

    WPF控件可以分为两类:原生控件自定义控件。 原生控件是由Microsoft提供的内置控件,Button、TextBox、Label、ComboBox等。...一、Popup控件详解 WPF的Popup控件是一种轻量级的容器,可以在其内容部分显示其他控件。Popup控件在显示隐藏时没有边框或标题栏,通常用于显示上下文菜单、浮动工具栏、弹出窗口等。...同时,Popup控件在WPF也支持动画效果的设置,可以让弹出式界面变得非常美观。...3.具体案例 下面是一个简单的WPF Popup控件的案例: 在WPF窗体添加一个按钮,点击该按钮会显示一个Popup控件,该控件包含一个Label一个TextBox,用户可以在TextBox输入文本...在WPF窗体添加一个按钮Popup控件。

    1.3K51

    FluentValidation在C# WPF的应用

    其实它也可以用于WPF属性验证,本文主要也是讲解该组件在WPF的使用,FluentValidation官网是: https://fluentvalidation.net/ 。...本文需要实现的功能unsetunset 提供WPF界面输入验证,采用MVVM方式,需要以下功能: 能验证ViewModel定义的基本数据类型属性:int\string等; 能验证ViewModel定义的复杂属性...创建工程、引入库 创建.NET WPF模板解决方案(.Net Framework模板也行)WpfFluentValidation,引入Nuget包FluentValidation(属性验证使用)Prism.Wpf...集合类 - Field 此类用作ViewModel的集合项使用,模拟动态表单数据校验,简单包含4个属性:字段名称、字段显示名称、数据类型、数据,表单主要根据数据类型验证输入的数据是否合法。...及Field类似,这里我加上了保存(SaveCommand)取消(CancelCommand)两个命令,其中保存命令需要所有属性验证通过才可用,通过注册属性的变化事件PropertyChanged,在变化事件处理程序验证

    17210
    领券