2017-01-30 2 views
0

J'ai une StackPanel sur une application Windows 8.1 et je veux ajouter une fonction Mouse-Over. Si je comprends bien, la fonction similaire sur les applications Windows 8.1 est PointerEntered/PointerExited. Comment puis-je obtenir le texte "Item" d'un TextBlock par exemple avec ces fonctions?Application Windows 8.1 StackPanel Mouse-Over

EDIT: Je veux fondamentalement obtenir le handle de TextBlock lorsque la souris est au-dessus pour que je puisse obtenir ou définir ses propriétés (texte etc ...).

Ceci est ma fonction C#

private void itemGridView_PointerEntered(object sender, PointerRoutedEventArgs e) 
    { 

    } 

et mon code XAML:

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

Répondre

1

Utilisez la propriété Children pour obtenir un UIElementCollection d'éléments enfants.

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

C'est une très bonne réponse et répond à une grande partie de mon problème. J'ai une question simple. Que se passe-t-il avec une image? J'ai essayé de créer un nouvel enfant en tant que Image, puis obtenir les Images.Properties mais aucun n'était disponible. –

+0

Montrez votre code. –

+0

J'ai simplement remplacé 'var tb = enfant par TextBlock;' par 'var tb = enfant comme Image;'. J'ai essayé d'obtenir l'image du 'StackPanel'. Toutes les propriétés sont disponibles mais toutes retournent 'null' –