0

我正在尝试在列表视图中动态创建一个文本框和一个按钮,并且效果很好。我尝试的下一件事是获取动态创建的文本框中的文本,并在 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           
}
4

2 回答 2

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;
}
于 2013-02-15T10:17:56.970 回答
0

在您的点击事件处理程序中,sender参数将是Button被点击的。因此,如果您将其转换为Button,您将获得可以使用的按钮对象。

但这只是给你按钮。如果您随后获得Button's DataContext,则DataTemplate该按钮所在的对象被创建以显示。

通常此时我会DataContext通过数据绑定将模板中事物的文本与对象相关联,因此只需DataContext适当地操作对象,UI 就会自动更新。

如果你还没有这样做,那么Button你可以从 WPF 可视化树开始寻找模板中的其他控件,但是当你可以只使用数据绑定时,这通常比它的价值更麻烦。

于 2013-02-15T10:19:03.580 回答