WPF 使用System.Windows.Interactivity交互事件

使用System.Windows.Interactivity交互事件

  • Triggers 示例1
  • Behavior 示例2

下载System.Windows.Interactivity.dll文件,并引入项目中(在VS项目的引用列表中可以看到)。可在Nuget搜索System.Windows.Interactivity下载安装到项目中。

XAML中使用该dll

 xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

Triggers 示例1


<TextBox Text="Test">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="LostFocus">
            <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext.OnTextLostFocus}"
                                   CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType={x:Type TextBox}}}"/>
        i:EventTrigger>
        <i:EventTrigger EventName="GotFocus">
            <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=DataContext.OnTextGotFocus}"
                                   CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType={x:Type TextBox}}}"/>
        i:EventTrigger>
    i:Interaction.Triggers>
TextBox>

由于VS中不支持System.Windows.Interactivity的智能提示,经常要查阅这个EventTrigger还能触发哪些方法,所有EventName的列表如下:

MSDN中Grid Events https://msdn.microsoft.com/en-us/library/system.windows.controls.grid_events(v=vs.110).aspx

Behavior 示例2

作用:当文本框中输入的网址改变时,触发的事件

public class TextBoxBindingUpdateOnEnterBehaviour : Behavior<TextBox>
    {
        protected override void OnAttached()
        {
            AssociatedObject.KeyDown += OnTextBoxKeyDown;
        }

        protected override void OnDetaching()
        {
            AssociatedObject.KeyDown -= OnTextBoxKeyDown;
        }

        private void OnTextBoxKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                var txtBox = sender as TextBox;
                txtBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
            }
        }
    }

xaml
xmlns:behaviours=“clr-namespace:CefSharp.MinimalExample.Wpf.Behaviours”

<TextBox x:Name="txtBoxAddress" Text="{Binding Address, ElementName=Browser, FallbackValue=www.google.com}" Grid.Column="2" FontSize="12" BorderBrush="Gray" BorderThickness="1">
    <i:Interaction.Behaviors>
        <behaviours:TextBoxBindingUpdateOnEnterBehaviour />
    i:Interaction.Behaviors>
TextBox>

你可能感兴趣的:(WPF)