2017-07-30 46 views
0

我有DataTemplateItemsControlPage.Xaml和代码如下所示:如何ItemsControl的访问特定的项目,并取得了一些数据,UWP

<ItemsControl x:Name="chatUI" VerticalAlignment="Bottom"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid x:Name="myGrid" Width="340" Background="{Binding Background}" HorizontalAlignment="{Binding GridHorizontalAlign}" Margin="10,0,10,10" MinHeight="45" BorderBrush="#FF003A4F" BorderThickness="0,0,0,2"> 
       <Polygon Visibility="{Binding RightVisibility}" Fill="{Binding Background}" Points="0,0 5,6, 0,12" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="0,0,-5,0" /> 
       <Polygon Visibility="{Binding LeftVisibility}" Fill="{Binding Background}" Points="5,0 0,6, 5,12" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="-5,0,0,0" /> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition /> 
         <RowDefinition /> 
        </Grid.RowDefinitions> 
        <TextBlock Text="{Binding Text}" TextWrapping="Wrap" FontSize="15" FontFamily="Segoe UI" Foreground="White" Margin="10,10,10,0"/> 
        <TextBlock Grid.Row="1" Text="{Binding Time}" TextWrapping="Wrap" FontSize="11" FontFamily="Segoe UI" Foreground="LightGray" Margin="10,0,10,5" VerticalAlignment="Bottom" TextAlignment="Right"/> 
       </Grid> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

我需要什么,现在越来越Text这是绑定到TextBlock时,我右键单击名为myGrid的网格。在C#中如何可能?

+0

你在哪里需要得到约束'Text'? – Fruchtzwerg

+0

@Fruchtzwerg我需要它作为一个字符串,当我右键点击一个特定的项目。 – ZOTeam

+0

这不是我的问题的答案_where_你需要字符串。 – Fruchtzwerg

回答

0

我们可以添加网格的RightTapped事件,当您右键单击网格时它会被触发。

RightTapped事件中,我们可以使用Grid.Children来获取Grid的子元素的集合。我们可以在名为myGrid的根网格中获得Grid。我们可以使用Grid.Children来获取网格中的TextBlock

例如:

private async void myGrid_RightTapped(object sender, RightTappedRoutedEventArgs e) 
{ 
    var RightTapGrid = sender as Grid; 
    var childernElements = RightTapGrid.Children; 
    foreach (var item in childernElements) 
    { 
     var grid = item as Grid; 
     if (grid != null) 
     { 
      var itemchildernElements = grid.Children; 
      foreach (var text in itemchildernElements) 
      { 
       var textBlock = text as TextBlock; 
       var dialog = new ContentDialog() 
       { 
        Title = textBlock.Text, 
        MaxWidth = this.ActualWidth 
       }; 
       dialog.PrimaryButtonText = "OK"; 
       dialog.SecondaryButtonText = "Cancel"; 
       await dialog.ShowAsync(); 
       break; 
      } 
     } 
    } 
} 
+0

非常感谢!像魅力一样工作 – ZOTeam

0

如果你得到你的Binding DataClass称为ClassName

你可以试试这个代码

XAML:

<ListView x:Name="chatUI" VerticalAlignment="Bottom" SelectionChanged="chatUI_SelectionChanged"> 
<ListView.ItemTemplate> 
    <DataTemplate> 
     <Grid x:Name="myGrid" Width="340" Background="{Binding Background}" HorizontalAlignment="{Binding GridHorizontalAlign}" Margin="10,0,10,10" MinHeight="45" BorderBrush="#FF003A4F" BorderThickness="0,0,0,2"> 
      <Polygon Visibility="{Binding RightVisibility}" Fill="{Binding Background}" Points="0,0 5,6, 0,12" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="0,0,-5,0" /> 
      <Polygon Visibility="{Binding LeftVisibility}" Fill="{Binding Background}" Points="5,0 0,6, 5,12" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="-5,0,0,0" /> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition /> 
       </Grid.RowDefinitions> 
       <TextBlock Text="{Binding Text}" TextWrapping="Wrap" FontSize="15" FontFamily="Segoe UI" Foreground="White" Margin="10,10,10,0"/> 
       <TextBlock Grid.Row="1" Text="{Binding Time}" TextWrapping="Wrap" FontSize="11" FontFamily="Segoe UI" Foreground="LightGray" Margin="10,0,10,5" VerticalAlignment="Bottom" TextAlignment="Right"/> 
      </Grid> 
     </Grid> 
    </DataTemplate> 
</Listview.ItemTemplate> 

并添加SelectionChanged事件:

private void chatUI_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ListView view = (ListView)sender; 
    //Get Selected Item 
    ClassName class = view.SelectedItem as ClassName; 
    string path = class.Text; 

// Now we have Text of selected item in Listview 

} 
+0

是否必须是ListView?我们不能在ItemsControl中做到这一点吗? – ZOTeam

+0

不,因为ItemControl没有SelectionChanged事件 –

相关问题