gpt4 book ai didi

wpf - 如何失去对按钮按下的关注?

转载 作者:行者123 更新时间:2023-12-03 10:12:37 24 4
gpt4 key购买 nike

简化:
在我看来,我有一个 xaml 页面,其中包含一个按钮和某种 TextBox。按钮绑定(bind)到 ViewModel 中的 DelegateCommand,编辑框绑定(bind)到 ViewModel 中的某个属性。

View:
<Button Command="{Binding MyCommand}"/>
<TextBox Text="{Binding MyString}"/>

ViewModel:
public DelegateCommand MyCommand { get; set; }
public String MyString { get; set; }

现在,当用户在框中输入内容并单击按钮时,按钮不会收到焦点更改事件。所以它不会将它的内容更新到属性中。所以属性 MyString 不会在单击按钮时反射(reflect) TextBox 的内容。因此,无论 MyCommand 正在做什么处理,它都在处理旧数据而不是当前输入。

现在,如果这真的只是一个 TextBox,我会将 UpdateSourceTrigger=PropertyChanged 添加到绑定(bind)中,我会很好。
但在这种情况下,编辑控件有点复杂,需要对内容进行一些验证。
所以当我用鼠标按下按钮时,我需要某种“失去焦点”的信号。

我的问题是:在 MVVM 中,按钮背后的代码无法访问 View ,因此不能使其失去焦点。

xaml(例如在 View 中)有什么方法可以使按钮在鼠标单击时获得键盘焦点?这将是我的自定义控件获得“失去焦点”消息的最简单方法。

最佳答案

回复:在 xaml 中(例如在 View 中)有什么方法可以使按钮在被鼠标单击时获得键盘焦点? > 一个按钮在被点击时会获得键盘焦点——前提是 IsEnabled、Focusable 和 IsHitTestVisible 属性都设置为 true,因为它们是默认的。要以编程方式设置键盘焦点,请调用 Keybaord.Focus,如下例所示。

与流行的 meme 不同,命令不必在 VM 中处理。如果在执行命令时需要独立于 VM 更改 View ,则可以在 View 中处理命令。事实上,这是 WPF 的原生模式。

以下示例显示了使用按钮上的 Command 属性来处理 View 中的命令。为简单起见,该示例没有 VM。即使命令是在 View 中处理的,如果有一个虚拟机, View 后面的代码也可以调用它。

public partial class MainWindow : Window
{
public static readonly RoutedUICommand MyCommand = new RoutedUICommand("My Command", "MyCommand", typeof(MainWindow));
public String MyString { get; set; }

public MainWindow()
{
MyString = "some text";
DataContext = this; // this simple example has no VM
InitializeComponent();
}
private void MyCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
Button1.Content = MyString;
Keyboard.Focus(Button1);
}
}
<Window x:Class="fwLoseFocus.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:me="clr-namespace:fwLoseFocus">
<Window.CommandBindings>
<CommandBinding Command="me:MainWindow.MyCommand" Executed="MyCommand_Executed"/>
</Window.CommandBindings>
<StackPanel>
<TextBox Text="{Binding MyString}"/>
<Button x:Name="Button1" Command="me:MainWindow.MyCommand"/>
</StackPanel>
</Window>

关于wpf - 如何失去对按钮按下的关注?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055332/

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