wpf自定义控件中使用自定义事件

willamyao willamyao     2022-09-16     661

关键词:

wpf自定义控件中使用自定义事件

1 创建自定义控件及自定义事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    /// <summary>
    /// 演示用的自定义控件
    /// </summary>
    public class ExtButton : Button
    {
        public ExtButton()
        {
            base.Click += ExtButton_Click;
        }
 
        private void ExtButton_Click(object sender, RoutedEventArgs e)
        {
            //定义传递参数
            // RoutedPropertyChangedEventArgs<Object> args = new RoutedPropertyChangedEventArgs<Object>("1", "2", ControlLoadOverEvent);
            RoutedEventArgs args2 = new RoutedEventArgs(ControlLoadOverEvent, this);
            //引用自定义路由事件
            this.RaiseEvent(args2);
 
        }
        /// <summary>
        /// 声明路由事件
        /// 参数:要注册的路由事件名称,路由事件的路由策略,事件处理程序的委托类型(可自定义),路由事件的所有者类类型
        /// </summary>
        public static readonly RoutedEvent ControlLoadOverEvent = EventManager.RegisterRoutedEvent("ControlLoadOverEvent", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventArgs<Object>), typeof(ExtButton));
        /// <summary>
        /// 处理各种路由事件的方法 
        /// </summary>
        public event RoutedEventHandler ControlLoadOver
        {
            //将路由事件添加路由事件处理程序
            add { AddHandler(ControlLoadOverEvent, value); }
            //从路由事件处理程序中移除路由事件
            remove { RemoveHandler(ControlLoadOverEvent, value); }
        }
 
    }

 

2 使用并绑定自定义控件的事件

1
2
3
4
5
6
7
8
            <!--i为System.Windows.Interactivity引用-->
            <ext:ExtButton x:Name="extButton" Content="绑定自定义事件" HorizontalAlignment="Left" Margin="123,10,0,0" VerticalAlignment="Top" Width="95">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="ControlLoadOver">
                        <i:InvokeCommandAction Command="{Binding ButtonLoadOverCommand}" CommandParameter="{Binding ElementName=extButton}"></i:InvokeCommandAction>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </ext:ExtButton>

 

3 触发自定义事件后的操作

方式1

1
2
3
4
5
6
7
8
9
10
        public DelegateCommand<Object> ButtonLoadOverCommand { getset; }
        public void ButtonLoadOver(Object obj)
        {
            //这里的参数为自定义控件对象
            ExtButton btn = obj as ExtButton;
            if (btn != null)
            {
                var content = btn.Content;
            }
        }

方式2

1
2
3
4
5
6
7
        this.extButton.ControlLoadOver += ExtButton_ControlLoadOver;
 
        private void ExtButton_ControlLoadOver(object sender, RoutedEventArgs e)
        {
            var btn = (Button)e.Source;
            var str = btn.Content;
        }

 

wpf自定义控件,自定义控件中由多个button组成,如何给每个button添加不同事件处理?

参考技术A将Button的Command绑定到不同的方法就可以了 查看详情

wpf下拉多选自定义控件添加change事件

参考技术A当用户选择下拉选项中选项时,需要对特定选项执行一些功能,就需要用到SelectionChanged事件,用来监视用户选择。在这个事件中可以使用SelectedValueToString语句,将选项转换为字符串,获取用户选项。需要同时实现可以... 查看详情

xaml:自定义控件中事件处理的最佳实践

在开发XAML(WPF/UWP)应用程序中,有时候,我们需要创建自定义控件(CustomControl)来满足实际需求。而在自定义控件中,我们一般会用到一些原生的控件(如Button、TextBox等)来辅助以完成自定义控件的功能。自定义控件并不像用户控... 查看详情

请教关于wpf上自定义控件添加事件的问题

...参考技术A你是想自己加事件吗?用以下代码试试://用于定义事件pubiceventEventHandler<EventArgs>StartAEvent;//用于触发事件privatevoidOnStartAEvent()varhandler=StartAEvent;if(handler!=null)handler(this,newEventArgs()); 查看详情

处理 WPF 自定义控件库中的所有异常

】处理WPF自定义控件库中的所有异常【英文标题】:HandlingAllExceptionsinaWPFCustomControlLibrary【发布时间】:2016-08-1905:34:23【问题描述】:当您需要处理WPF应用程序中的所有异常时,您可以使用:Application.DispatcherUnhandledException事件就... 查看详情

2016-11-11坚持学习day24wpf自定义控件附加属性自定义事件

UserControl,自定义控件。这里刚刚想到一个问题。什么时候应该用usercontrol定义一个控件。什么时候应该重写控件的template和样式,实现新效果。引用一下人家的话:http://www.cnblogs.com/denghejun/p/3671061.html 我的理解:Usercontrol应... 查看详情

如何在wpf中usercontrol现实自定义事件

...    b.重载PaintCell和GetEditorControl方法添加自定义控件。具体实现步骤:    a.创建用户自定义控件-UserControl,我在这里添加了FileUpload和Calendar标准控件。  b.创建自定义单元格类型  c.应用... 查看详情

在 WPF C# 中无法访问用户控件的自定义属性

】在WPFC#中无法访问用户控件的自定义属性【英文标题】:CustomPropertyofUserControlnotaccessibleinWPFC#【发布时间】:2021-12-3112:38:48【问题描述】:我想使用C#在WPF中创建一个具有自定义属性(MyLabel)的自定义用户控件(UserControl),而无需... 查看详情

wpf自定义控件の自定义控件(代码片段)

原文:WPF自定义控件(四)の自定义控件在实际工作中,WPF提供的控件并不能完全满足不同的设计需求。这时,需要我们设计自定义控件。这里LZ总结一些自己的思路,特性如下:CouplingUITemplateBehaviourFunctionPackage下面举例说说在项... 查看详情

从自定义控件的模板部分中删除事件处理程序

】从自定义控件的模板部分中删除事件处理程序【英文标题】:Removingeventhandlersfromcustomcontrol\'stemplateparts【发布时间】:2011-06-1420:27:29【问题描述】:当我第一次开始编写WPF自定义控件时,如果我想添加一个事件处理程序,我会... 查看详情

做wpf页面的时候我想通过c#代码触发自定义控件中的事件怎么做

如题是否可以在.cs中通过C#代码触发自定义控件中自定义的事件?参考技术A如果是在xmal里面,比如说一个buttonclick为自定义事件.这样就注册到了Click事件.<ButtonClick="Button_Click"/>在.CS里面直接注册就好了,不明白,这有难... 查看详情

wpf自定义控件の自定义控件

...并不能完全满足不同的设计需求。这时,需要我们设计自定义控件。这里LZ总结一些自己的思路,特性如下:CouplingUITemplateBehaviourFunctionPackage下面举例说说在项目中我们经常用到调音台音量条,写一个自定义控件模拟调音台音量... 查看详情

[wpf自定义控件]在menuitem上使用radiobutton(代码片段)

原文:[WPF自定义控件]在MenuItem上使用RadioButton1.需求#上图这种包含多选(CheckBox)和单选(RadioButton)的菜单十分常见,可是在WPF中只提供了多选的MenuItem。顺便一提,要使MenuItem可以多选,只需要将MenuItem的IsCheckable属性设置为True... 查看详情

[wpf自定义控件库]使用windowchrome自定义ribbonwindow(代码片段)

原文:[WPF自定义控件库]使用WindowChrome自定义RibbonWindow1.为什么要自定义RibbonWindow自定义Window有可能是设计或功能上的要求,可以是非必要的,而自定义RibbonWindow则不一样:如果程序使用了自定义样式的Window,为了统一外观需要把R... 查看详情

xaml:自定义控件中事件处理的最佳实践(代码片段)

原文:XAML:自定义控件中事件处理的最佳实践在开发XAML(WPF/UWP)应用程序中,有时候,我们需要创建自定义控件(CustomControl)来满足实际需求。而在自定义控件中,我们一般会用到一些原生的控件(如Button、TextBox等)来辅助以完成自... 查看详情

如何从自定义用户控件 WPF、C# 中的枚举自定义属性中获取值?

】如何从自定义用户控件WPF、C#中的枚举自定义属性中获取值?【英文标题】:HowtogetthevaluefromanenumcustompropertyincustomusercontrolWPF,C#?【发布时间】:2021-08-0712:59:56【问题描述】:我正在使用3个自定义属性创建一个简单的用户控件:... 查看详情

强制在自定义 WPF 控件中重新绘制自定义绘制的 UIElement

】强制在自定义WPF控件中重新绘制自定义绘制的UIElement【英文标题】:ForcearepaintofacustomdrawnUIElementinacustomWPFcontrol【发布时间】:2017-04-0920:10:38【问题描述】:我正在开发一个自定义WPF控件。此控件的主要目的是在可滚动区域中... 查看详情

WPF中的自定义光标?

】WPF中的自定义光标?【英文标题】:CustomcursorinWPF?【发布时间】:2010-09-0723:45:13【问题描述】:我想在WPF应用程序中使用图像或图标作为自定义光标。我该怎么做?【问题讨论】:【参考方案1】:您有两个基本选择:当鼠标... 查看详情