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" />
最大的好处就是可以传递参数了。