首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

|ZYCWPF| 用户自定义控件,怎么给小弟我原来RichTextBox添加事件

2013-01-08 
|ZYCWPF| 用户自定义控件,如何给我原来RichTextBox添加事件?我定义了public partial class ZRichTextBox :

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

热点排行