gpt4 book ai didi

WPF:如果您使用助记符激活按钮,则不会发生文本框数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 09:00:44 25 4
gpt4 key购买 nike

假设您有一个绑定(bind)到数据项属性的文本框和一个按钮。如果您在文本框中输入文本,然后用鼠标单击按钮,则会按顺序发生以下事件:

  • 文本从控件写入绑定(bind)项
  • 触发按钮点击事件

但是,如果您使用助记键激活该按钮,文本框不会失去焦点。似乎只有当文本框失去焦点时,文本才会从控件写入绑定(bind)项。

是否有已知的解决方法?无论您左键单击按钮、按 Tab 键并按空格键还是使用助记符,我都希望获得相同的行为。

我将提供一个完整的示例。如果您输入单词“Hello”并按下按钮,您会看到一个消息框“WidgetName=Hello”。但如果您随后将其更改为“Goodbye”并按 ALT-A,它仍然会显示“WidgetName=Hello”。

这是 XAML 代码

<Window x:Class="BindingOrder.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BindingOrder"
Title="Window1" Height="79" Width="282">
<Window.Resources>
<local:Widget x:Key="Widget" />
</Window.Resources>
<StackPanel Orientation="Horizontal" Height="30" VerticalAlignment="Top">
<TextBox
Width="200"
Margin="3, 3, 3, 3"
Text="{Binding Source={StaticResource Widget}, Path=WidgetName}" />
<Button
Click="OnApplyClicked"
Margin="3, 3, 3, 3">
_Apply
</Button>
</StackPanel>
</Window>

以及支持代码:

using System;
using System.Windows;

namespace BindingOrder
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}

private void OnApplyClicked(object sender, RoutedEventArgs e)
{
Widget w = (Widget)this.Resources["Widget"];
MessageBox.Show(string.Format("WidgetName={0}", w.WidgetName));
}
}

public class Widget
{
public string WidgetName { get; set; }
}
}

最佳答案

我发现的最简单的解决方案(除了使用 UpdateSourceTrigger 属性,如 Joseph 建议的那样)是将焦点转移到 Click 事件中的按钮。无论按钮如何“单击”(通过键盘或鼠标),都会触发按钮的 Click 事件。

如果您希望 TextBox 保持焦点,您可以将当前获得焦点的控件保留在变量中,然后将焦点转移到按钮并立即返回到该控件。但这并不理想,因为文本框中的插入符号位置将会改变。

关于WPF:如果您使用助记符激活按钮,则不会发生文本框数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1441558/

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