0

我在一个列表中有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>

有任何想法吗?

所有帮助表示赞赏!

4

1 回答 1

0

有几种方法。一种方法是设置文本块的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);
}
于 2013-07-07T17:42:19.387 回答