UWP WinUI2 xaml如何在代码隐藏中访问DataTemplate中的元素

l0oc07j2  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(73)

我有下面的xaml代码

<DataTemplate x:Key="ImageTextTemplate" x:DataType="local1:CustomDataObject">
    <Grid AutomationProperties.Name="{x:Bind Title}" Width="280"
            PointerEntered="Grid_PointerEntered"
            PointerExited="Grid_PointerExited">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Image Source="{x:Bind ImageLocation}" Height="100" Stretch="Fill" VerticalAlignment="Top"/>
        <StackPanel Grid.Column="1" Margin="8,0,0,8">
            <TextBlock Text="{x:Bind Title}" Style="{ThemeResource SubtitleTextBlockStyle}" Margin="0,0,0,8"/>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{x:Bind Views}" Style="{ThemeResource CaptionTextBlockStyle}"/>
                <TextBlock Text=" Views " Style="{ThemeResource CaptionTextBlockStyle}"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{x:Bind Likes}" Style="{ThemeResource CaptionTextBlockStyle}" />
                <TextBlock Text=" Likes" Style="{ThemeResource CaptionTextBlockStyle}"/>
            </StackPanel>
        </StackPanel>
        <ToolTipService.ToolTip>
            <ToolTip x:Name="MyToolTip" Content="This is my tooltip" />
        </ToolTipService.ToolTip>
    </Grid>
</DataTemplate>

我想访问代码隐藏中的工具提示元素。但是当我跟随时,它给了我错误。
错误:名称“MyToolTip”在当前上下文中不存在

private void Grid_PointerExited(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
{
    var gridViewItem = sender as GridViewItem;
    if (!gridViewItem.IsEnabled)
    {
        ToolTipService.SetToolTip(gridViewItem, null);
        MyToolTip.IsOpen = true;
    }
}

我正在尝试显示禁用的GridViewItem上的工具提示。代码来自github上的WinUI 2 Gallery示例。

r1zk6ea1

r1zk6ea11#

不能将附加到Grid的事件处理程序的sender参数强制转换为Grid以外的任何对象。
一旦你有了对Grid的引用,你就可以使用附加的属性访问它的ToolTip

private void Grid_PointerExited(object sender, PointerRoutedEventArgs e)
{
    Grid grid = (Grid)sender;
    ToolTip MyToolTip = ToolTipService.GetToolTip(grid) as ToolTip;
    if (MyToolTip != null)
        MyToolTip.IsOpen = true;
}

相关问题