读书人

|ZYCWPF| 用户自定义控件怎么给小弟

发布时间: 2013-01-08 14:02:14 作者: rapoo

|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中也可以的,就用以前说的方法还是可以的:


<ScrollViewer x:Name="PART_ContentHost" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
Background="{TemplateBinding Background}"
z:MouseLeftButtonUp.Command="{Binding OnMouseLeftButtonUp}">
</ScrollViewer>
然后在ViewModel里添加命令处理程序,在EventCommand.cs文件中添加新的事件命令类:

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);

[解决办法]
引用:
哦代码也不行
C# code?1234 public ZRichTextBox() {this.AddHandler(RichTextBox.MouseLeftButtonUpEvent, new RoutedEventHandler(RichTextMouseClick), true); }
这样会对我的整个ZRichTextBox有效
……

那你直接用RichTextBox就是了。
public ZRichTextBox()
{
RichTextBox.AddHandler(RichTextBox.MouseLeftButtonUpEvent, new RoutedEventHandler(RichTextMouseClick), true);
}

读书人网 >C#

热点推荐