如何检索动态创建的文本框的文本并将其显示为wpf c#中动态创建的按钮的内容

时间:2013-02-15 09:24:54

标签: c# wpf

我正在尝试动态创建列表视图中的文本框和按钮,并且工作正常。 接下来我尝试的是将文本存在于动态创建的文本框中,并在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           
}

2 个答案:

答案 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可视化树并开始寻找模板中的其他控件,但是虽然这是可能的,但它通常比它的价值更麻烦什么时候可以使用数据绑定。