WPF 如何向用户控件中添加新的控件

WPF 如何向用户控件中添加新的控件,第1张

自定义控件是继承ContentControl的,也就是说跟Windows一样,只能有一个Child,但是你可以设置这个Child是一个容器控件,比如StackPanel或者Grid等任何可以放多个Child的控件,往这个控件的Children里面添加子元素即可

给你两种方法:为方便起见我用button代替自定义控件,具体 *** 作还是一样的。

前台代码如下:

<StackPanel>

<DataGrid AutoGenerateColumns="False" Height="200" Name="dataGrid1" Width="200" CanUserAddRows="False">

<DataGrid.Columns>

<DataGridTemplateColumn Header="Header">

<DataGridTemplateColumn.CellTemplate>

<DataTemplate>

<StackPanel Orientation="Horizontal">

<Button x:Name="mybutton" Tag="MyButton" Height="22" Width="50" Content="{Binding Id}"/>

<TextBlock Margin="10 0 0 0" Text="{Binding Name}"/>

</StackPanel>

</DataTemplate>

</DataGridTemplateColumn.CellTemplate>

</DataGridTemplateColumn>

</DataGrid.Columns>

</DataGrid>

<Button HorizontalAlignment="Center" Margin="10" Click="Button_Click">Search</Button>

<TextBlock x:Name="txt_result"/>

</StackPanel>

我放了一个只有一列模板列的datagrid,一个按钮,一个文本

后台给datagrid绑上数据源

dataGrid1.ItemsSource = new List<People>

{

new People(){Id = 1,Name = "aaa"},

new People(){Id = 2,Name = "bbb"},

new People(){Id = 3,Name = "ccc"}

}

然后就是通过按钮事件来处理模板列中内容

1.使用VisualTreeHelper

2.使用FindName

private void Button_Click(object sender, RoutedEventArgs e)

{

DataGridTemplateColumn tempColumn = dataGrid1.Columns[0] as DataGridTemplateColumn

DataTemplate dtemp = tempColumn.CellTemplate

//Button btn = (Button)VisualTreeHelper.GetChild(dtemp.LoadContent(),0)//第一种方法

StackPanel sp = (StackPanel)dtemp.LoadContent() Button btn = sp.FindName("mybutton") as Button//第二种方法

txt_result.Text = btn.Tag.ToString() }

其实解决起来也不难。在mainwindow后台添加usercontrol1 button的click事件。里面的逻辑设置usercontrol1.visibility = visibility.Collapseusercontrol2.visibility= visibility.visible。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11411861.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存