Как выделить текстовое поле в шаблоне данных - PullRequest
0 голосов
/ 28 марта 2012

при программировании для 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>

Эффект, которого я хочу достичь: Нажмите на текстовое поле, чтобы скрыть текстовое поле при отображении текстового поля. CODE BEHIND:

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

Однако, очевидно, селектор неверен.Я пытался добавить имя для текстового поля и текстового блока, но, похоже, имя не работает в шаблоне данных.Кто-нибудь, кто может сказать мне, как я могу выбрать текстовое поле и текстовое поле в шаблоне данных, пожалуйста?Большое спасибо !!!

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Попробуйте это:

<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;                
            }
        }
0 голосов
/ 28 марта 2012

Настройка имени в шаблоне работает, но вы не можете получить к нему доступ напрямую!

Вместо этого попробуйте так:

<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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...