gpt4 book ai didi

c# - TextBox KeyDown 触发事件不适用于 Backspace 和 Delete 键

转载 作者:行者123 更新时间:2023-11-30 13:56:37 25 4
gpt4 key购买 nike

我有一个文本框,我为该文本框附加了一个按键事件。一切正常,但我只是注意到当我按下“Backspace”和“Delete”键时,绑定(bind)命令没有被调用。

我的 View xaml 文件:-

<TextBox x:Name="textBox" Width="500" Text="{Binding TextBoxText, UpdateSourceTrigger=PropertyChanged}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<cmd:EventToCommand Command="{BindingPath=TextBoxKeyDownEvent}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>

我的 ViewModel cs 文件:-

    //TextBox Key Down Event Handler
private DelegateCommand _textBoxKeyDownEvent;
public ICommand TextBoxKeyDownEvent
{
get
{
if (_textBoxKeyDownEvent == null)
{
_textBoxKeyDownEvent = new DelegateCommand(TextBoxKeyDownEventHandler);
}
return _textBoxKeyDownEvent;
}
set { }
}

谁能给我一些建议

最佳答案

编辑:您必须使用 PreviewKeyDown 才能正常工作。 Space 和 Delete 不会触发 KeyDown。如果您忽略 MVVM 并将 KeyDown 的处理程序放在代码隐藏中,它也会失败


如何将文本属性绑定(bind)到 View 模型中的字符串?

我为我的想法构建了一个快速、简单的示例。

结果

左侧 TextBox 中的文本会简单地填充到右侧的 Textblock。

enter image description here

查看

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding TextBoxValue, UpdateSourceTrigger=PropertyChanged}" Width="250"/>
<StackPanel Orientation="Horizontal">
<TextBlock>"</TextBlock>
<TextBlock Text="{Binding TextBoxValue, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock>"</TextBlock>
</StackPanel>
</StackPanel>
</Window>

View 模型

public class MainWindowViewModel : INotifyPropertyChanged
{
private string textBoxValue;

public string TextBoxValue
{
get { return textBoxValue; }
set
{
textBoxValue = value;
OnTextBoxValueChanged();
RaisePropertyChanged();
}
}

void OnTextBoxValueChanged()
{
// you logic here, if needed.
}

#region INotifyPropertyChanged implementation

public event PropertyChangedEventHandler PropertyChanged;

void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}

#endregion
}

关于c# - TextBox KeyDown 触发事件不适用于 Backspace 和 Delete 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26073168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com