2012-03-28 10 views
0

während der Programmierung für Windows Phone 7, erstellte ich eine Listbox und mit DataTemplate, die einen Textblock und ein Textfeld enthält. Das Textfeld ist standardmäßig ausgeblendet.So wählen Sie die Textbox in Datenvorlage

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

Der Effekt, den ich erreichen will ist: Tippen Sie Textblock Textblock während Show Textbox zu verbergen.

Code hinter:

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

jedoch offensichtlich ist der Wähler nicht korrekt. Ich habe versucht, Name für Textfeld und Textblock hinzuzufügen, aber Name scheint funktioniert nicht in Datenvorlage. Kann mir jemand sagen, wie ich den Textblock und die Textbox in einer Datenvorlage auswählen kann? Danke vielmals!!!

Antwort

0

Das Festlegen des Namens auf der Vorlage funktioniert, aber Sie können nicht direkt darauf zugreifen!

Stattdessen versuchen, es wie folgt aus:

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

und der Code:

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

Hallo Pedro, ich habe Ihren Code versucht, aber Visual Studio meldet Fehler für GetTemplateChild. Habe ich etwas verpasst? –

+0

Sie haben Recht, ich habe gerade den Code repariert ... bitte versuchen Sie es jetzt! –

+0

Diesmal funktioniert der Code grandios !! Du hast wirklich meinen Arsch gerettet, Mann :) –

1

Try this:

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

Und in Code hinter:

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

Vielen Dank !! Ich habe deinen Code ausprobiert und finde es auch toll. Ich liebe euch! lol –

+0

Großartig! Bitte markieren Sie das Thema als beantwortet! –

Verwandte Themen