Windows Phone-在画布中查找子项目

本文关键字:查找 子项目 布中 Phone- Windows | 更新日期: 2023-09-27 18:21:17

我在一个列表中有n画布,当点击它时,我需要在C#中的画布中找到TextBlock的属性,.xaml代码如下

<Canvas Height="175" Width="360" Background="{StaticResource PhoneAccentBrush}" toolkit:TiltEffect.IsTiltEnabled="True" Name="canvasNote" Tap="canvasNote_Tap">
   <toolkit:ContextMenuService.ContextMenu>
      <toolkit:ContextMenu IsZoomEnabled="False">
         <toolkit:MenuItem Header="Open" Click="hubTileOpen_Click"/>
         <toolkit:MenuItem Header="Edit" Click="hubTileEdit_Click"/>
         <toolkit:MenuItem Header="Delete" Click="hubTileDelete_Click"/>
      </toolkit:ContextMenu>
   </toolkit:ContextMenuService.ContextMenu>
   <TextBlock Text="{Binding Title}" Margin="12,4,0,0" FontWeight="Bold" FontSize="20" Foreground="White"/>
   <TextBlock Text="{Binding Details}" Margin="12,28,0,0" TextWrapping="Wrap" Width="352" FontSize="20" Foreground="White"/>
</Canvas>

有什么想法吗?

感谢所有的帮助!

Windows Phone-在画布中查找子项目

有几种方法。一种方法是设置文本块的x:Name属性,并使用FindName方法检索它们:

<Canvas Height="175" Width="360" Background="{StaticResource PhoneAccentBrush}" toolkit:TiltEffect.IsTiltEnabled="True" Name="canvasNote" Tap="canvasNote_Tap">
   <toolkit:ContextMenuService.ContextMenu>
      <toolkit:ContextMenu IsZoomEnabled="False">
         <toolkit:MenuItem Header="Open" Click="hubTileOpen_Click"/>
         <toolkit:MenuItem Header="Edit" Click="hubTileEdit_Click"/>
         <toolkit:MenuItem Header="Delete" Click="hubTileDelete_Click"/>
      </toolkit:ContextMenu>
   </toolkit:ContextMenuService.ContextMenu>
   <TextBlock x:Name="Title" Text="{Binding Title}" Margin="12,4,0,0" FontWeight="Bold" FontSize="20" Foreground="White"/>
   <TextBlock x:Name="Details" Text="{Binding Details}" Margin="12,28,0,0" TextWrapping="Wrap" Width="352" FontSize="20" Foreground="White"/>
</Canvas>

然后在Tap事件中:

private void canvasNote_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    var canvas = (Canvas)sender;
    var title = (TextBlock)canvas.FindName("Title");
    System.Diagnostics.Debug.WriteLine(title.Text);
}

但是,由于您使用n画布而不使用数据模板,因此可能会遇到名称冲突。因此,另一种方法是使用Tag属性:

<Canvas Height="175" Width="360" Background="{StaticResource PhoneAccentBrush}" toolkit:TiltEffect.IsTiltEnabled="True" Name="canvasNote" Tap="canvasNote_Tap">
   <toolkit:ContextMenuService.ContextMenu>
      <toolkit:ContextMenu IsZoomEnabled="False">
         <toolkit:MenuItem Header="Open" Click="hubTileOpen_Click"/>
         <toolkit:MenuItem Header="Edit" Click="hubTileEdit_Click"/>
         <toolkit:MenuItem Header="Delete" Click="hubTileDelete_Click"/>
      </toolkit:ContextMenu>
   </toolkit:ContextMenuService.ContextMenu>
   <TextBlock Tag="Title" Text="{Binding Title}" Margin="12,4,0,0" FontWeight="Bold" FontSize="20" Foreground="White"/>
   <TextBlock Tag="Details" Text="{Binding Details}" Margin="12,28,0,0" TextWrapping="Wrap" Width="352" FontSize="20" Foreground="White"/>
</Canvas>

Tap事件中:

private void canvasNote_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
    var canvas = (Canvas)sender;
    var title = canvas.Children.OfType<TextBlock>().First(t => (t.Tag as string) == "Title");
    System.Diagnostics.Debug.WriteLine(title.Text);
}