如何在wpf的用户控件中订阅事件[英] how To subsribe to event in user control in wpf

本文是小编为大家收集整理的关于如何在wpf的用户控件中订阅事件的处理方法,想解了如何在wpf的用户控件中订阅事件的问题怎么解决?如何在wpf的用户控件中订阅事件问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

嗨,我正在创建一个包含 3 个单选按钮的用户控件.我为用户控件中的每个单选按钮创建了一个选中的事件.如果我在我的主窗口中添加 2 个或更多用户控件,我可以从任何一个控件访问事件.我怎么解决这个问题.
我在按钮单击时动态添加用户控件.

推荐答案

您可以创建自定义控件的自定义事件
并从单选按钮的选中事件中引发该事件
编码愉快!
:)

用户控制 XAML:
<用户控件 x:class="WpfApplication1.UserControl1" xmlns:x="#unknown">xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"麦克:忽略="d"d:DesignHeight="103" d:DesignWidth="134"背景="爱丽丝蓝"边距="10"><grid 高度="81" 宽度="111" 背景="AntiqueWhite"><单选按钮 content="选项A" height="16" 水平对齐="Left" margin="12,9,0,0" name="radioButtonA" 垂直对齐="Top" 选中="radioButton_CheckedChanged" /><单选按钮 内容="选项B" height="16" 水平对齐="Left" margin="12,31,0,0" name="radioButtonB" 垂直对齐="Top" 勾选="radioButton_CheckedChanged" /><单选按钮 内容="选项C" height="16" 水平对齐="Left" margin="12,53,0,0" name="radioButtonC" 垂直对齐="Top" 勾选="radioButton_CheckedChanged" /></grid></usercontrol>
用户控制码:
public 部分  UserControl1:用户控件{public 委托 void OptionChangedEventHandler(UserControl1 sender,RadioButton radioButton, bool?checkedState);public 事件 OptionChangedEventHandler OptionChanged;public UserControl1(){初始化组件();}public string DisplayName { get;设置;}private void radioButton_CheckedChanged(object sender, RoutedEventArgse){if (this.OptionChanged != null)this.OptionChanged(this, sender asRadioButton, (sender as RadioButton).IsChecked);}}

XAML 主窗口:
<窗口 x:class="WpfApplication1.MainWindow" xmlns:x="#unknown">xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"标题="主窗口"高度="350"宽度="525"><网格><stackpanel><按钮 content="添加用户控制" click="Button_Click" 高度="30" /><wrappanel name="wrapPanel" 方向="垂直" /></stackpanel></grid></window>
主窗口代码:
public 部分  MainWindow : 窗口{private 静态 int i = 0;public MainWindow(){初始化组件();}private void Button_Click(object 发送者,RoutedEventArgse){UserControl1 uc = new UserControl1() { DisplayName = "用户控制 " + (i++).ToString() };uc.OptionChanged+=new UserControl1.OptionChangedEventHandler(uc_OptionChanged);wrapPanel.Children.Add(uc);}void uc_OptionChanged(UserControl1 sender, RadioButton radioButton, bool?checkedState){MessageBox.Show(String.Format("'{0}' = '{1}' for User Control '{2}'", radioButton.Content, checkedState, sender.DisplayName));}}

本文地址:https://www.itbaoku.cn/post/1355877.html