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

时间:2012-03-28 09:35:29

标签: windows-phone-7

在为Windows Phone 7编程时,我创建了一个列表框并使用包含文本块和文本框的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>

我想要完成的效果是:在显示文本框时点按文本块以隐藏文本块。

背后的代码:

private void TextBlock_Tap(object sender, GestureEventArgs e)
    {
        TextBlock.Visibilty = Visibility.Collapsed;
        TextBox.Visibilty = Visibility.Visible;
    }

但是,显然选择器不正确。我尝试为文本框和文本块添加名称,但名称似乎在数据模板中不起作用。是否有人可以告诉我如何在数据模板中选择文本块和文本框?非常感谢!!!

2 个答案:

答案 0 :(得分:1)

试试这个:

<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;                
            }
        }

答案 1 :(得分:0)

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

相反,请尝试这样:

<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>

代码:

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;
}