`

wpf - input binding examples

    博客分类:
  • WPF
wpf 
阅读更多

Input binding is the mechanism that you can invoke a command by some input measures, such as mouse input or keyboard input. 

 

 

The concrete classes to InputBindings are MouseBinding and KeyBinding. 

 

 

Since Input bindings are something that you may use often, below shows you an example on how to use the Input Bindings. (normally you will create input binding on parent element so that you can fire the command from a bigger container )

 

 

Suppose that you can create a class that implements the ICommand, and this class has some input gestures which indicate what input it expects to fire the commands. 

 

 

 

namespace InputBindingsTest
{
  public class SimpleDelegateCommand  : ICommand
  {

    public Key GestureKey { get; set; }
    public ModifierKeys GestureModifier { get; set; }
    public MouseAction MouseGesture { get; set; }

    Action<object> _executeDelegate;

    public SimpleDelegateCommand(Action<object> executeDelegate)
    {
      _executeDelegate = executeDelegate;
    }

    public bool CanExecute(object parameter)
    {
      return true;
      // if the CanExecute changes, raise the OnCanExecutedChanged()
      //OnCanExecutedChanged(null);
    }

    public event EventHandler CanExecuteChanged;

    protected virtual void OnCanExecutedChanged(EventArgs eventargs)
    {
      var changed = CanExecuteChanged;
      if (changed != null)
      {
        changed(this, eventargs);
      }
    }

    public void Execute(object parameter)
    {
      _executeDelegate(parameter);
    }
  }
}
 

 

and with this class, we are going to create a concrete command , which represents a action to change the background of container. 

 

The name of the Command is ChangeColorCommand, and we want to indicate that user can fire the command through the use of "Ctrl + C" or "Right Mouse ClicK"; Also, in this source file, the handler to the ChangeColorCommand is also defined.

 

 

namespace InputBindingsTest
{
  /// <summary>
  /// Interaction logic for MainWindow.xaml
  /// </summary>
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();
      InitializeCommand();
    }


    public SimpleDelegateCommand ChangeColorCommand
    {
      get { return changeColorCommand; }
    }

    private SimpleDelegateCommand changeColorCommand;


    private void InitializeCommand()
    {
      originalColor = this.Background;
      changeColorCommand = new SimpleDelegateCommand(x => this.ChangeColor(x));
      DataContext = this;
      changeColorCommand.GestureKey = Key.C;
      changeColorCommand.GestureModifier = ModifierKeys.Control;
      changeColorCommand.MouseGesture = MouseAction.RightClick;
    }

    private Brush originalColor, alternateColor;

    private void ChangeColor(object colorString)
    {
      if (colorString == null)
      {
        return;
      }

      Color newColor = (Color)ColorConverter.ConvertFromString((string)colorString);
      alternateColor = new SolidColorBrush(newColor);

      if (this.Background == originalColor)
      {
        this.Background = alternateColor;
      }
      else
      {
        this.Background = originalColor;
      }
    }

  }
}
 

 

 

Now, to make the Input binding really effective, below is the xaml file. where we set up the Input binding on the container element (in this case, the MainWindow), and we uses the concrete binding such as KeyBinding and the MouseBinding;

 

 

<Window x:Class="InputBindingsTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.InputBindings>
        <KeyBinding Command="{Binding ChangeColorCommand}"
                CommandParameter="{Binding ElementName=colorPicker, Path=SelectedItem}"
                Key="{Binding ChangeColorCommand.GestureKey}"
                Modifiers="{Binding ChangeColorCommand.GestureModifier}"/>
        <MouseBinding Command="{Binding ChangeColorCommand}"
                  CommandParameter="{Binding ElementName=colorPicker, Path=SelectedItem}"
                  MouseAction="{Binding ChangeColorCommand.MouseGesture}"/>
    </Window.InputBindings>
    <StackPanel Background="Transparent">
        <Button Content="Change Color"
                Command="{Binding ChangeColorCommand}"
                CommandParameter="{Binding ElementName=colorPicker, Path=SelectedItem}" />
        <ListBox Name="colorPicker"
           Background="Transparent"
           xmlns:sys="clr-namespace:System;assembly=mscorlib">
            <sys:String>Red</sys:String>
            <sys:String>Green</sys:String>
            <sys:String>Blue</sys:String>
            <sys:String>Yellow</sys:String>
            <sys:String>Orange</sys:String>
            <sys:String>Purple</sys:String>
        </ListBox>
    </StackPanel>
</Window>
 

 

now you can change the color of the background either through the use of "Right Mouse" click or you can simpley press "Ctrl + C";

 

分享到:
评论

相关推荐

    gong-wpf-dragdrop, GongSolutions.WPF.DragDrop 库是WPF的拖动'n'拖放框架.zip

    gong-wpf-dragdrop, GongSolutions.WPF.DragDrop 库是WPF的拖动'n'拖放框架 简介GongSolutions.WPF.DragDrop 库是一个易于使用的拖拉'n'拖放框架。特性使用 MVVM: 拖放逻辑可以放在ViewModel中。 代码不需要放在in中...

    通用WPF主题控件包rubyer-wpf-master

    通用WPF主题控件包rubyer-wpf-master是一款专为Windows Presentation Foundation (WPF) 应用程序设计的开源UI框架。它提供了丰富的主题和控件,旨在帮助开发者快速构建美观且用户友好的应用程序界面。在2.0.0版本中...

    wpf-mvvm-DeskTop-Sample-master_C#_WPF_wpf客户端zfs_

    标题中的“wpf-mvvm-DeskTop-Sample-master”表明这是一个关于WPF(Windows Presentation Foundation)桌面应用程序的示例项目,使用了MVVM(Model-View-ViewModel)设计模式。这个项目是用C#编程语言编写的,面向的...

    WPF-Blockly-master.zip

    **WPF-Blockly** 是一个基于Windows Presentation Foundation (WPF) 的图形化编程工具,它为用户提供了构建和设计程序的直观界面。WPF作为Microsoft .NET Framework的一部分,主要用于构建桌面应用程序,它提供了...

    WPF-BindingTest.zip

    这个“WPF-BindingTest.zip”压缩包文件很可能是为了演示或测试WPF中的值绑定和转换功能。在WPF中,通过值绑定,你可以将控件的显示数据与应用程序的模型或视图模型直接关联,从而实现数据驱动的用户界面。 **WPF值...

    C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 4

    C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手

    WPF-ControlBase-master.zip

    在这个名为"WPF-ControlBase-master.zip"的压缩包中,我们可以推测它包含了一个基于WPF的控制库项目,可能是一个开源或者个人开发的项目,用于提供自定义的WPF控件。这些控件可能是对标准WPF控件的扩展或增强,也...

    WPF-Samples-master_WPF基本sample_

    WPF的基本空间历程,使用.net core3.0.1版本

    基于WPF的图形化编程控件和环境WPF-Blockly-master

    【标题】"基于WPF的图形化编程控件和环境WPF-Blockly-master" 提供了一个创新的编程体验,它将传统的代码编写转变为图形化的流程图形式,使得编程变得更加直观和易于理解。WPF(Windows Presentation Foundation)是...

    bootstrap-wpf-style-master 样式

    Bootstrap-WPF 样式是一种将流行的前端框架 Bootstrap 的设计风格应用于 WPF(Windows Presentation Foundation)应用程序的方法。Bootstrap 是一个广泛使用的开源工具包,主要用于构建响应式、移动设备优先的网页...

    WPF-Diagram-Designer:WPF图表设计器源代码

    通过深入研究WPF-Diagram-Designer的源代码(如WPF-Diagram-Designer-master文件夹中的内容),开发者不仅可以学习到如何在WPF中构建复杂的图形界面,还可以了解到图形编辑器的设计原理和实现细节,对于提升图形应用...

    AI-wpf-controls一个Wpf控件库

    在本文中,我们将深入探讨"AI-wpf-controls",这是一个专为Windows Presentation Foundation(WPF)框架设计的控件库。这个独特的库整合了多个知名控件库的优点,包括MahApps.Metro、Material-Design、HandyControl...

    WPF-MaterialDesign-master.zip_WPF_WPF非常好的界面_包括多种漂亮的皮肤_漂亮的控件_配色

    在本项目"WPF-MaterialDesign-master.zip"中,重点在于利用**Material Design**这一设计语言来增强WPF应用的视觉效果。Material Design是Google推出的一种设计规范,其灵感来源于现实世界中的纸张和墨水,强调层次感...

    Wpf-glTF-testing.zip

    在“Wpf-glTF-testing.zip”压缩包中,我们有一个基于WPF(Windows Presentation Foundation)的简化glTF文件查看器项目。 WPF是.NET Framework的一部分,是一个用于构建Windows桌面应用程序的框架。它提供了丰富的...

    WPF-强大的图表.zip

    **WPF - 强大的图表技术** Windows Presentation Foundation (WPF) 是Microsoft开发的一个用于构建桌面应用程序的框架,它提供了丰富的图形系统,包括对2D和3D图形的强大支持。在WPF中,开发人员可以利用各种图表...

    wpf---StatusBar

    “wpf---StatusBar”这个标题表明我们将探讨的是WPF(Windows Presentation Foundation)框架中的StatusBar组件。WPF是.NET Framework的一部分,用于构建桌面应用程序,它提供了丰富的用户界面(UI)功能。StatusBar...

    Wpf的Diagram画板aistudio-wpf-diagram-master

    【标题】"Wpf的Diagram画板aistudio-wpf-diagram-master" 是一个基于WPF(Windows Presentation Foundation)技术的图形设计工具,用于创建和编辑图表或流程图。这个项目是在原有的WPF-Diagram-Designer基础上进行的...

    OpenControls.Wpf-master

    《OpenControls.Wpf-master:深度探索WPF框架控件》 在Windows Presentation Foundation(WPF)的世界里,开发者们能够创建出美观且功能丰富的桌面应用程序。OpenControls.Wpf-master项目,正如其名,是一个专注于...

    wpf-datagrid-access DB

    在这个“wpf-datagrid-access DB”主题中,我们将深入探讨如何利用WPF Datagrid与Microsoft Access数据库进行交互,实现数据的读取、更新和保存。 1. **WPF Datagrid简介** - Datagrid是WPF中的一个数据展示控件,...

    WPF-MVVM计算器

    **WPF-MVVM计算器详解** Windows Presentation Foundation (WPF) 是Microsoft开发的一种用户界面框架,用于构建桌面应用程序。在WPF中,Model-View-ViewModel(MVVM)设计模式是一种广泛采用的架构模式,它将业务...

Global site tag (gtag.js) - Google Analytics