泛舟湖上清波郎朗
这是一个工作示例。假设您的用户控件有两个控件;一个ComboBox和一个Button。您希望能够将主控件(父控件)中的某些内容绑定到用户控件。然后,在选择某些内容并单击按钮后,您希望用户控件将事件发生通知给父级,并传递所选值。用户控件XAML:<UserControl ... d:DesignHeight="40" d:DesignWidth="200"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="160"/> <ColumnDefinition Width="40"/> </Grid.ColumnDefinitions> <ComboBox Grid.Column="0" Margin="4" Name="ItemsComboBox" ItemsSource="{Binding Source, RelativeSource={RelativeSource AncestorType=UserControl}}"/> <Button Grid.Column="1" Margin="4" Content="+" Click="Button_Click"/> </Grid></UserControl>以下绑定将允许您将数据列表绑定到组合框(形成父级):ItemsSource="{Binding Source, RelativeSource={RelativeSource AncestorType=UserControl}}"在您的 中MainWindow,您将像这样使用该控件:<Grid> <local:UCComboButton Grid.Row="0" Width="200" Height="40" x:Name="MyUC" Source="{Binding Names}"/></Grid>并在UserControl后面的s代码中:public partial class UCComboButton : UserControl{ public UCComboButton() { InitializeComponent(); } // We use this dependency property to bind a list to the combo box. public static readonly DependencyProperty SourceProperty = DependencyProperty.Register("Source", typeof(IEnumerable), typeof(UCComboButton), new PropertyMetadata(null)); public IEnumerable Source { get { return (IEnumerable)GetValue(SourceProperty); } set { SetValue(SourceProperty, value); } } // This is to send the occurred event, in this case button click, to the parent, along with the selected data. public class SelectedItemEventArgs : EventArgs { public string SelectedChoice { get; set; } } public event EventHandler<SelectedItemEventArgs> ItemHasBeenSelected; private void Button_Click(object sender, RoutedEventArgs e) { var selected = ItemsComboBox.SelectedValue; ItemHasBeenSelected?.Invoke(this, new SelectedItemEventArgs { SelectedChoice = selected.ToString() }); }}现在在MainWindow.xaml.cs:public MainWindow(){ InitializeComponent(); // Subscribe to the item selected event MyUC.ItemHasBeenSelected += UCButtonClicked; Names = new List<string> { "A", "B", "C" }; DataContext = this;}void UCButtonClicked(object sender, UCComboButton.SelectedItemEventArgs e){ var value = e.SelectedChoice; // Do something with the value}请注意,上面的Names列表是从主窗口绑定到用户控件的内容XAML。