我正在开发一个用户需要输入用户名和密码才能登录的应用程序。
我正在使用 MVVM 灯光框架将我的视图与我的视图模型分开。现在我的视图上有一个按钮,在相应的视图模型上捕获了点击事件。
如果用户按下输入按钮,我也希望有可能他们也可以登录。在 WPF 中,您可以将按钮设置为 IsDefault,但在 WinRT 中似乎不可能。
我怎样才能做到这一点?
我正在开发一个用户需要输入用户名和密码才能登录的应用程序。
我正在使用 MVVM 灯光框架将我的视图与我的视图模型分开。现在我的视图上有一个按钮,在相应的视图模型上捕获了点击事件。
如果用户按下输入按钮,我也希望有可能他们也可以登录。在 WPF 中,您可以将按钮设置为 IsDefault,但在 WinRT 中似乎不可能。
我怎样才能做到这一点?
我认为您可以将此代码放入您的视图模型中并检查是否按下了回车键,然后在按下它时启动与按下按钮时相同的方法
Windows.UI.Xaml.Window.Current.CoreWindow.KeyDown += (sender, arg) =>
{
if (arg.VirtualKey == Windows.System.VirtualKey.Enter)
{
//Your login method
}
};
根据我的评论,我不建议在视图模型中使用 UI 代码。使用触发器绑定到文本框中的按键命令。
<TextBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<cmd:EventToCommandCommand="{Binding MyCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
请务必在您的 xaml 声明中包含以下内容:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="http://www.galasoft.ch/mvvmlight"
希望这可以帮助
页面上有一个名为 OnKeyDown() 的虚拟方法,您可以覆盖该方法。这比订阅事件更安全,更适合 MVVM。我更喜欢将 DataContext 转换为我的视图模型类型并调用我想要的任何内容。
可以通过以下行为实现此目的:
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="KeyDown">
<core:CallMethodAction TargetObject="{Binding}" MethodName="Load" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
你必须参考:
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
但是,它仅适用于所有键。我没有看到任何过滤某个键的可能性。
有:
xmlns:i="using:WinRtBehaviors"
xmlns:b="using:Win8nl.Behaviors"
<i:Interaction.Behaviors>
<b:EventToCommandBehavior Event="Loaded" Command="LoadedCommand"/>
</i:Interaction.Behaviors>
来自 Nuget。