按钮 GotFocus 的 UWP EventTriggerBehaviors
UWP EventTriggerBehaviors to button GotFocus
我想了解如何在 UWP 项目中设置 EventTriggerBehaviors。
所以我知道我需要安装包 Microsoft.Xaml.Behaviors.Uwp.Managed,并在我的 XAML 文件中声明以下命名空间:
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
按钮本身应声明为:
<Button x:Name="btnTest >
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="GotFocus" >
<Core:EventTriggerBehavior.Actions>
<Core:InvokeCommandAction Command="{Binding ... }" />
</Core:EventTriggerBehavior.Actions>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Button>
但后来我迷路了...我想要的是一旦按钮获得焦点,它就会在文本框中设置一些文本(基于按钮名称)。
我需要服务吗?ViewModel 代码应该是什么?
实际上,有人能推荐关于这个主题的好书、例子、书籍吗?
更新以下 James 回复:
XAML InvokeCommandAction 变为:
<Core:InvokeCommandAction Command="{Binding OnButtonFocusCommand}" CommandParameter="{Binding Name, ElementName=btnTest}" />
但是如何在 ViewModel 的方法中接收参数?
InvokeCommandAction 命令 属性 需要在视图模型中实现 ICommand,以便在触发 EventTriggerBehavior 时执行操作。
您可能在 XAML:
中有类似的内容
<Button x:Name="btnTest">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="GotFocus">
<Core:EventTriggerBehavior.Actions>
<Core:InvokeCommandAction Command="{Binding OnButtonFocusCommand}" />
</Core:EventTriggerBehavior.Actions>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Button>
然后在绑定的视图模型中,你会得到类似这样的东西:
public ViewModel()
{
OnButtonFocusCommand = new DelegateCommand(() =>
{
this.TextBoxText = "Hello, World";
});
}
public ICommand OnButtonFocusCommand { get; private set; }
尽管平台并未内置 DelegateCommand,但您可以在线找到 DelegateCommand 或 RelayCommand 的许多实现。
编辑:您也可以像这样使用传递的参数来执行此操作:
public ViewModel()
{
OnButtonFocusCommand = new DelegateCommand<RoutedEventArgs>(args =>
{
this.TextBoxText = "Hello, World";
});
}
RoutedEventArgs 将是您传递的参数类型。对于 Focus 事件传递的内容,这是您将收到的参数。在这些情况下,您需要 DelegateCommand{T}。
我引用的 DelegateCommand 示例也有一种机制来检查是否 运行 通过验证模型来执行操作。你可以这样做:
public ViewModel()
{
OnButtonFocusCommand = new DelegateCommand<RoutedEventArgs>(args =>
{
this.TextBoxText = "Hello, World";
},
args => args.OriginalSource is TextBox);
}
对于更新 TextBox 文本的场景,您需要在视图模型中创建一个 属性(在我的示例中,我展示了正在更新的 TextBoxText)。然后 属性 需要绑定到 XAML.
中文本框的文本 属性
对于要看的东西,我建议先看一下 MVVM 框架(可能是 MvvmLight),如果您还没有阅读它的话。
此外 official Microsoft samples on GitHub 可能涵盖了很多可能对您有用的主题。
如果您需要更多信息,请与我们联系,我们很乐意提供帮助。
我想了解如何在 UWP 项目中设置 EventTriggerBehaviors。 所以我知道我需要安装包 Microsoft.Xaml.Behaviors.Uwp.Managed,并在我的 XAML 文件中声明以下命名空间:
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
按钮本身应声明为:
<Button x:Name="btnTest >
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="GotFocus" >
<Core:EventTriggerBehavior.Actions>
<Core:InvokeCommandAction Command="{Binding ... }" />
</Core:EventTriggerBehavior.Actions>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Button>
但后来我迷路了...我想要的是一旦按钮获得焦点,它就会在文本框中设置一些文本(基于按钮名称)。
我需要服务吗?ViewModel 代码应该是什么?
实际上,有人能推荐关于这个主题的好书、例子、书籍吗?
更新以下 James 回复: XAML InvokeCommandAction 变为:
<Core:InvokeCommandAction Command="{Binding OnButtonFocusCommand}" CommandParameter="{Binding Name, ElementName=btnTest}" />
但是如何在 ViewModel 的方法中接收参数?
InvokeCommandAction 命令 属性 需要在视图模型中实现 ICommand,以便在触发 EventTriggerBehavior 时执行操作。
您可能在 XAML:
中有类似的内容 <Button x:Name="btnTest">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="GotFocus">
<Core:EventTriggerBehavior.Actions>
<Core:InvokeCommandAction Command="{Binding OnButtonFocusCommand}" />
</Core:EventTriggerBehavior.Actions>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Button>
然后在绑定的视图模型中,你会得到类似这样的东西:
public ViewModel()
{
OnButtonFocusCommand = new DelegateCommand(() =>
{
this.TextBoxText = "Hello, World";
});
}
public ICommand OnButtonFocusCommand { get; private set; }
尽管平台并未内置 DelegateCommand,但您可以在线找到 DelegateCommand 或 RelayCommand 的许多实现。
编辑:您也可以像这样使用传递的参数来执行此操作:
public ViewModel()
{
OnButtonFocusCommand = new DelegateCommand<RoutedEventArgs>(args =>
{
this.TextBoxText = "Hello, World";
});
}
RoutedEventArgs 将是您传递的参数类型。对于 Focus 事件传递的内容,这是您将收到的参数。在这些情况下,您需要 DelegateCommand{T}。
我引用的 DelegateCommand 示例也有一种机制来检查是否 运行 通过验证模型来执行操作。你可以这样做:
public ViewModel()
{
OnButtonFocusCommand = new DelegateCommand<RoutedEventArgs>(args =>
{
this.TextBoxText = "Hello, World";
},
args => args.OriginalSource is TextBox);
}
对于更新 TextBox 文本的场景,您需要在视图模型中创建一个 属性(在我的示例中,我展示了正在更新的 TextBoxText)。然后 属性 需要绑定到 XAML.
中文本框的文本 属性对于要看的东西,我建议先看一下 MVVM 框架(可能是 MvvmLight),如果您还没有阅读它的话。
此外 official Microsoft samples on GitHub 可能涵盖了很多可能对您有用的主题。
如果您需要更多信息,请与我们联系,我们很乐意提供帮助。