Windows phone 7 如何在数据模板中选择文本框

Windows phone 7 如何在数据模板中选择文本框,windows-phone-7,Windows Phone 7,在为WindowsPhone7编程时,我创建了一个列表框,并使用了包含textblock和textbox的DataTemplate。默认情况下,文本框处于隐藏状态 XAML: <ListBox> <ListBox.ItemTemplate> <DataTemplate> <Canvas Width="460" Height="60" Background="{StaticResour

在为WindowsPhone7编程时,我创建了一个列表框,并使用了包含textblock和textbox的DataTemplate。默认情况下,文本框处于隐藏状态

XAML:

<ListBox>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Canvas Width="460" Height="60" Background="{StaticResource PhoneAccentBrush}">
                    <TextBlock Text="{Binding data}" FontSize="30" Margin="10,10,10,0"/>
                    <TextBox Height="60" Width="460" Visibility="Collapsed"/>
                </Canvas>
            </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

然而,显然选择器是不正确的。我试图为textbox和textblock添加名称,但该名称在数据模板中似乎不起作用。有人能告诉我如何在数据模板中选择文本块和文本框吗?非常感谢

在模板上设置名称确实有效,但您不能直接访问它

相反,可以这样尝试:

<ListBox x:Name="MyListBox">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Canvas Width="460" Height="60" Background="{StaticResource PhoneAccentBrush}">
                <TextBlock x:Name="MyTextBlock" Text="{Binding data}" FontSize="30" Margin="10,10,10,0" Tap="MyTextBlock_Tap" />
                <TextBox x:Name="MyTextBox" Height="60" Width="460" Visibility="Collapsed"/>
            </Canvas>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
试试这个:

<ListBox Name="lst"  >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Canvas Width="460" Height="60" Background="{StaticResource PhoneAccentBrush}" Tap="Canvas_Tap">
                            <TextBlock Text="{Binding}" FontSize="30" Margin="10,10,10,10"/>
                            <TextBox Height="60" Width="460" Visibility="Collapsed" Text="text"/>
                        </Canvas>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

嗨,Pedro,我尝试了你的代码,但是Visual Studio为GetTemplateChild报告了错误。我错过什么了吗?这次代码运行得非常好!!你真的救了我的命,伙计:)太谢谢你了!!我试过你的代码,发现它也很好用。我爱你们!英雄联盟
private void MyTextBlock_Tap(object sender, GestureEventArgs e)
{
    var elem = (FrameworkElement)sender;

    var myTextBlock = (TextBlock)elem.FindName("MyTextBlock");
    var myTextBox = (TextBox)elem.FindName("MyTextBox");

    myTextBlock.Visibility = Visibility.Collapsed;
    myTextBox.Visibility = Visibility.Visible;
}
<ListBox Name="lst"  >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Canvas Width="460" Height="60" Background="{StaticResource PhoneAccentBrush}" Tap="Canvas_Tap">
                            <TextBlock Text="{Binding}" FontSize="30" Margin="10,10,10,10"/>
                            <TextBox Height="60" Width="460" Visibility="Collapsed" Text="text"/>
                        </Canvas>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
private void Canvas_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {

            var m = (sender as Canvas).Children;

            foreach (UIElement x in m)
            {
                if ((x as TextBlock) != null)
                    (x as TextBlock).Visibility = Visibility.Collapsed;
                if ((x as TextBox) != null)
                    (x as TextBox).Visibility = Visibility.Visible;                
            }
        }