2017-01-30 1 views
0

Ich habe eine StackPanel auf einer Windows 8.1 App und ich möchte eine Mouse-Over Funktion hinzufügen. Wenn ich die ähnliche Funktion auf Windows 8.1-Anwendungen richtig verstehe, ist PointerEntered/PointerExited. Wie bekomme ich zum Beispiel den "Item's" Text eines TextBlock mit diesen Funktionen?Windows App 8.1 StackPanel Mouse-Over

EDIT: Ich möchte im Grunde erhalten die TextBlock 's Handle, wenn die Maus darüber ist, damit ich es Eigenschaften (Text etc ...) bekommen oder einstellen kann.

Dies ist meine C# Funktion

private void itemGridView_PointerEntered(object sender, PointerRoutedEventArgs e) 
    { 

    } 

und mein XAML-Code:

<GridView 
     x:Name="itemGridView" 
     AutomationProperties.AutomationId="ItemGridView" 
     AutomationProperties.Name="Items In Group" 
     TabIndex="1" 
     Grid.RowSpan="2" 
     Padding="120,126,120,50" 
     ItemsSource="{Binding Source={StaticResource itemsViewSource}}" 
     SelectionMode="None" 
     IsSwipeEnabled="false" 
     IsItemClickEnabled="True" 
     ItemClick="ItemView_ItemClick" PointerEntered="itemGridView_PointerEntered"> 
     <GridView.ItemTemplate> 
      <DataTemplate> 
        <Grid Height="110" Width="480" Margin="10"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="*"/> 
        </Grid.ColumnDefinitions> 
         <Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="110" Height="110"> 
          <Image x:Name="ImageItemName" Source="{Binding ImagePath}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> 
         </Border> 
         <StackPanel x:Name="stackPanel1" Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0"> 
          <TextBlock x:Name="ItemTitleText" Text="{Binding Title}" Style="{StaticResource TitleTextBlockStyle}" TextWrapping="NoWrap"/> 
          <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap"/> 
          <TextBlock x:Name="ItemDescText" Text="{Binding Description}" Style="{StaticResource BodyTextBlockStyle}" MaxHeight="60"/> 
         </StackPanel> 
        </Grid> 
       </DataTemplate> 
      </GridView.ItemTemplate> 
      <GridView.Header> 
      <StackPanel Width="480" Margin="0,4,14,0"> 
       <TextBlock x:Name="TitleTextBlock" Text="{Binding Subtitle}" Margin="0,0,0,20" Style="{StaticResource SubheaderTextBlockStyle}" MaxHeight="60"/> 
       <Image x:Name="imageName" Source="{Binding ImagePath}" Height="400" Margin="0,0,0,20" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> 
       <TextBlock x:Name="DescTextBlock" Text="{Binding Description}" Margin="0,0,0,0" Style="{StaticResource BodyTextBlockStyle}"/> 
      </StackPanel> 
     </GridView.Header> 
     <GridView.ItemContainerStyle> 
      <Style TargetType="FrameworkElement"> 
       <Setter Property="Margin" Value="52,0,0,2"/> 
      </Style> 
     </GridView.ItemContainerStyle> 
    </GridView> 

Antwort

1

Verwenden Eigenschaft Children einen UIElementCollection der untergeordneten Elemente zu bekommen.

Panel.Children property. MSDN

private void StackPanel_PointerEntered(object sender, PointerRoutedEventArgs e) 
    { 
     var values = new List<string>(); 
     var sp = sender as StackPanel; 
     if (sp != null) 
     { 
      foreach (var child in sp.Children) 
      { 
       var tb = child as TextBlock; 
       if (tb != null) 
       { 
        values.Add(tb.Text); 
       } 
      } 
     } 
    } 
+0

Das ist eine sehr gute Antwort ist und Antworten meines Problems eine große Rolle. Ich habe eine einfache Frage. Was passiert mit einem Bild? Ich habe versucht, ein neues Kind als Image zu erstellen und dann die Images.Properties zu bekommen, aber keine war verfügbar. –

+0

Zeigen Sie Ihren Code. –

+0

Ich ersetzte einfach 'var tb = Kind als TextBlock;' mit 'var tb = Kind als Bild;'. Versucht, das Image des 'StackPanel' zu erhalten. Alle Eigenschaften sind verfügbar, aber alle haben 'null' zurückgegeben. –