动态创建到 WPF 表单的用户控件上的按钮单击事件
Posted
技术标签:
【中文标题】动态创建到 WPF 表单的用户控件上的按钮单击事件【英文标题】:Button click event on a user control dynamically created to a WPF form 【发布时间】:2019-05-29 17:51:21 【问题描述】:我在运行时根据对 XML 数据数据库的查询添加用户控件。所以,用户控件的数量是不同的。
此外,鉴于接收到的 XML 类型,我无法将用户控件绑定到从 XML 数据创建的列表,因为在某些情况下,我将根据这是新客户端还是现有客户端来拉取不同的字段。对于现有客户,只有 8 个字段。一个新客户需要 40 或 50 个字段。
我正在创建基于新客户端与现有客户端的两个用户控件之一。
我相信这是用户控件所需要的。
这里是代码sn-p。
public event RoutedEventHandler btnAddClient_Click;
private void OnButtonClick(object sender, RoutedEventArgs e)
if(btnAddClient_Click !=null)
btnAddClient_Click(this, new RoutedEventArgs());
public ucNewClient()
InitializeComponent();
我需要知道如何在动态创建的用户控件和主窗体上设置点击事件。
任何帮助将不胜感激。
我进行了多项研究,但没有找到帮助。我发现的是带有点击事件的用户控件。但是,用户控件不是动态的/在运行时。
我希望执行将客户端添加或更新到列表的操作,以便在项目稍后执行任务。
【问题讨论】:
在设计时和运行时创建控件可能会更好,只是显示或隐藏它? 【参考方案1】:欢迎来到 SO。
当您需要在 WPF 中呈现项目列表时,您应该使用 ItemsControl 或其派生类之一。从您希望在视图模型(或您的 DataContext 设置的任何内容)中显示的数据元素列表开始:
private ObservableCollection<SomeBaseClass> _MyItems;
public ObservableCollection<SomeBaseClass> MyItems
get return this._MyItems;
set
if (this._MyItems != value)
this._MyItems = value;
RaisePropertyChanged(() => this.MyItems);
然后您声明一个绑定到此列表的 ItemsControl:
<ItemsControl ItemsSource="Binding MyItems" />
垂直堆栈面板是默认布局面板,但如果需要,您可以将其更改为其他内容。无论哪种方式,您都可以为要显示的每种数据类型创建一个数据模板:
<Window.Resources>
<DataTemplate DataType="x:Type local:DataTypeA">
<TextBlock Text="This is data type A" />
</DataTemplate>
<DataTemplate DataType="x:Type local:DataTypeB">
<TextBlock Text="This is data type B" />
</DataTemplate>
... etc ...
</Window.Resources>
就是这样!
有时您希望根据实际数据本身以不同方式显示内容,在这种情况下,您可以使用带有数据触发器的单个数据模板:
<ControlTemplate x:Key="TemplateA">
<TextBlock Text="This is template A" />
</ControlTemplate>
<ControlTemplate x:Key="TemplateB">
<TextBlock Text="This is template B" />
</ControlTemplate>
<DataTemplate DataType="x:Type local:SomeBaseClass">
<ContentControl Content="Binding">
<ContentControl.Style>
<Style TargetType="x:Type ContentControl">
<Style.Triggers>
<DataTrigger Binding="Binding SomeProperty" Value="ValueA">
<Setter Property="Template" Value="StaticResource TemplateA" />
</DataTrigger>
<DataTrigger Binding="Binding SomeProperty" Value="ValueB">
<Setter Property="Template" Value="StaticResource TemplateB" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
【讨论】:
以上是关于动态创建到 WPF 表单的用户控件上的按钮单击事件的主要内容,如果未能解决你的问题,请参考以下文章
如何通过Powershell代码更改特定WPF列表框项的背景颜色?