Xaml基础知识

xmlns是XML Namespaces的缩写,中文名称是XML命名空间。
指定命名空间xmlns:mycontrol="clr-namespace:SDKSample;assembly=SDKSampleLibrary",就可以使用该命名空间下的类了,通常使用在某个命名空间下的控件的时候就要引入命名空间,这点跟代码的实现是一样的。namespace就不说了,assembly是程序集引用,所以当前项目中的命名空间,可以不指定assembly。
xaml中事件的绑定,button有个比较常用的绑定事件,command,但是那些不常用的事件怎么绑定viewmodel中的方法呢?
wpf中提供了,System.Windows.Interactivity这个命名空间来解决这个问题,从使用的方式上看,跟样式中的触发器使用方法是一样的。
样式中触发器的使用(鼠标滑过按钮变色):
        <Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <ControlTemplate.Triggers>

                  <Trigger Property="IsMouseOver" Value="true">
                  <Setter Property="Background" Value="Black"/>
                  </Trigger>

                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

非command事件绑定:

首先引入System.Windows.Interactivity命名空间,xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 

       <TextBox  Text="" Width="150" Height="26"  >
           <i:Interaction.Triggers>
              <i:EventTrigger EventName="TextChanged">
                 <i:InvokeCommandAction Command="{Binding TxtChangeCommand}"/>
              </i:EventTrigger>
           </i:Interaction.Triggers>
       </TextBox>

如果使用现有的MVVM框架绑定事件的话,可以直接引用自己框架中的command,我就用过MVVMLight,就以这个为例:

引入命名空间:xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4" 

<i:InvokeCommandAction Command="{Binding TxtChangeCommand}"/>改成
<cmd:EventToCommand Command="{BindingTxtChangeCommand}" PassEventArgsToCommand="True" />

最大的好处就是可以传递参数了。
原文地址:https://www.cnblogs.com/jinshizuofei/p/3422420.html