User Control XAML:
<usercontrol 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"
mc:Ignorable="d"
d:DesignHeight="103" d:DesignWidth="134"
Background="AliceBlue"
Margin="10">
<grid height="81" width="111" background="AntiqueWhite">
<radiobutton content="Option A" height="16" horizontalalignment="Left" margin="12,9,0,0" name="radioButtonA" verticalalignment="Top" checked="radioButton_CheckedChanged" />
<radiobutton content="Option B" height="16" horizontalalignment="Left" margin="12,31,0,0" name="radioButtonB" verticalalignment="Top" checked="radioButton_CheckedChanged" />
<radiobutton content="Option C" height="16" horizontalalignment="Left" margin="12,53,0,0" name="radioButtonC" verticalalignment="Top" checked="radioButton_CheckedChanged" />
</grid>
</usercontrol>
User Control Code:
public partial class UserControl1 : UserControl
{
public delegate void OptionChangedEventHandler(UserControl1 sender, RadioButton radioButton, bool? checkedState);
public event OptionChangedEventHandler OptionChanged;
public UserControl1()
{
InitializeComponent();
}
public string DisplayName { get; set; }
private void radioButton_CheckedChanged(object sender, RoutedEventArgs e)
{
if (this.OptionChanged != null)
this.OptionChanged(this, sender as RadioButton, (sender as RadioButton).IsChecked);
}
}
Main Window XAML:
<window 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"
Title="MainWindow" Height="350" Width="525">
<grid>
<stackpanel>
<button content="Add User Control" click="Button_Click" height="30" />
<wrappanel name="wrapPanel" orientation="Vertical" />
</stackpanel>
</grid>
</window>
Main Window Code:
public partial class MainWindow : Window
{
private static int i = 0;
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
UserControl1 uc = new UserControl1() { DisplayName = "User Control " + (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));
}
}