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

1.引用System.Windows.Interactivity,在右键,添加引用->扩展里找到此dll添加

XAML中使用该dll

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

Triggers 示例1

<!-- TextBox控件的获得焦点、失去焦点事件 -->
<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 编程,TextBox在MVVM模式下滚动到底的一种方法


下一篇:js点击复制文本内容