|ZYCWPF| 用户自定义控件,如何给我原来RichTextBox添加事件?
我定义了
public partial class ZRichTextBox : RichTextBox
这个用户控件
<Style TargetType="{x:Type control:ZRichTextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type control:ZRichTextBox}">
<DockPanel LastChildFill="True">
<Border DockPanel.Dock="Top" SnapsToDevicePixels="True"
BorderBrush="{TemplateBinding ToolbarBorderBrush}"
BorderThickness ="{TemplateBinding ToolbarBorderThickness}">
<StackPanel Height="24" Orientation="Horizontal"
Background="{TemplateBinding ToolbarBackground}">
.....这里为我的工具栏按钮
</StackPanel>
</Border>
<ScrollViewer x:Name="PART_ContentHost" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
</ScrollViewer>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
那我现在要给我的RichTextBox添加MouseLeftButtonUpEvent
我在代码中的话可以用:
public ZRichTextBox()
{
this.AddHandler(RichTextBox.MouseLeftButtonUpEvent, new RoutedEventHandler(RichTextMouseClick), true);
}
但我现在是用MVVM方式写的,要如何进行绑定
public ZRichTextBox()
{
this.DataContext = new ViewModel.ZRichTextBoxViewModel(this);
//this.DataContext = this;
}
谢谢
[解决办法]
写在ControlTemplate中也可以的,就用以前说的方法还是可以的:
然后在ViewModel里添加命令处理程序,在EventCommand.cs文件中添加新的事件命令类:
<ScrollViewer x:Name="PART_ContentHost" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
Background="{TemplateBinding Background}"
z:MouseLeftButtonUp.Command="{Binding OnMouseLeftButtonUp}">
</ScrollViewer>
public class MouseLeftButtonUp : EventCommand<MouseLeftButtonUp> { static MouseLeftButtonUp() { Register(UIElement.MouseLeftButtonUpEvent); } }
public class MouseLeftButtonDown : EventCommand<MouseLeftButtonDown> { static MouseLeftButtonDown() { Register(UIElement.MouseLeftButtonDownEvent); } }
有一点要修改下,因为rtb会处理鼠标事件,所以要把AddHandler的handledEventsToo设置成true:
在EventCommand.cs文件中找到下面这句改下:
_addHandler = x => x.AddHandler(@event, handler(), true);
[解决办法]
那你直接用RichTextBox就是了。
public ZRichTextBox()
{
RichTextBox.AddHandler(RichTextBox.MouseLeftButtonUpEvent, new RoutedEventHandler(RichTextMouseClick), true);
}