我正在尝试动态创建列表视图中的文本框和按钮,并且工作正常。 接下来我尝试的是将文本存在于动态创建的文本框中,并在button_click事件上显示为按钮的内容。我很困惑,并且不知道如何访问后面代码中的动态创建按钮或文本作为"名称属性"对此无效。
欢迎任何建议......
XAML
<ListView Height="222" HorizontalAlignment="Left" Margin="341,24,0,0" Name="listView1" VerticalAlignment="Top" Width="290" Background="Green"
AllowDrop="True"
DragDrop.Drop="listview_drop"
DragDrop.DragEnter="treeview_dragenter" ItemsSource="{Binding XPath=self::*}"></pre>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch" x:Name="stc">
<TextBlock Text="{Binding Path=Name}" Margin="0,0,3,0"/>
<ComboBox Margin="0,0,3,0" x:Name="cbox1">
<ComboBoxItem Content="Less Than"/>
<ComboBoxItem Content="Greater Than"/>
<ComboBoxItem Content="Equals"/>
</ComboBox>
<TextBox Margin="0,0,3,0" Width="50" x:Name="textbox1" />
<Button x:Name="but1" Height="25" Width="35" Click="click" Content="gen" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
代码
private void click(object sender, RoutedEventArgs e)
{
//Don`t know what do do here
}
答案 0 :(得分:1)
您可以通过FindName方法获取指定的TextBox:
private void click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var parent = button.Parent as FrameworkElement;
var textBox = parent.FindName("textbox1") as TextBox;
button.Content = textBox.Text;
}
答案 1 :(得分:0)
在您的点击事件处理程序中,sender
参数将是被点击的Button
。因此,如果将其强制转换为Button
,则会获得要使用的按钮对象。
但那只是给你按钮。然后,如果您抓住Button
的{{1}},那就是创建要显示按钮所属DataContext
的对象。
通常在这一点上,我会通过数据绑定将模板中的事物的文本与DataTemplate
对象相关联,因此它只是适当地操纵DataContext
对象和UI的情况。将自动更新。
如果你还没有这样做,那么从DataContext
你可以上WPF可视化树并开始寻找模板中的其他控件,但是虽然这是可能的,但它通常比它的价值更麻烦什么时候可以使用数据绑定。