在 WinUI-3 C# 中,如何在鼠标悬停自定义工具提示类时获取父元素?

问题描述 投票:0回答:0

在我的自定义 RibbonScreenTip 类中,我必须将事件处理为 ToolTip.Opened。

public class CustomToolTip : ToolTip
{
     public RibbonScreenTip ()
     {
       DefaultStyleKey = typeof(RibbonScreenTip);
       this.Opened += CustomToolTip_Opened;
     }

     private void RibbonScreenTip _Opened(object sender, object e)
     {
         FrameworkElement parent = this.PlacementTarget as FrameworkElement;

         if (parent != null)
         {
         }
     }
}

我为我的自定义控件工具提示类编写了一个单独的样式。

在我的 MainWindow.xaml 中:


<ribbon:RibbonGroup Header="Font">
    <ribbon:RibbonButton >
         <ToolTipService.ToolTip>
             <ribbon:RibbonScreenTip  Title="Button" Placement="Top"   Description="used to control process"/>
         </ToolTipService.ToolTip>
    </ribbon:RibbonButton>
</ribbon:RibbonGroup>

我试图在我的 RibbonScreenTip 类打开事件中获得父级:

       FrameworkElement parent = this. PlacementTarget as FrameworkElement;
       DependencyObject parent = VisualTreeHelper.GetParent(this); 

我已将 RibbonScreenTip 附加到 RibbonButton。但是,RibbonScreenTip.Parent 仍显示为 null。请帮助我。

我首先尝试了以下步骤。它工作正常。 但是,我必须为每个按钮单独做。


namespace ToolTipTests;

public class CustomToolTip : ToolTip
{
    public static readonly DependencyProperty SourceProperty =
        DependencyProperty.Register(
            nameof(Source),
            typeof(FrameworkElement),
            typeof(CustomToolTip),
            new PropertyMetadata(default));

    public CustomToolTip()
    {
        this.Opened += CustomToolTip_Opened;
    }

    public FrameworkElement Source
    {
        get => (FrameworkElement)GetValue(SourceProperty);
        set => SetValue(SourceProperty, value);
    }

    private void CustomToolTip_Opened(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
    {
        if (this.Source is FrameworkElement parent)
        {
            // Do something here...
        }
    }
}

我的 MainWindow.xaml 喜欢:

<Button
    x:Name="ButtonControl"
    Content="Click">
    <ToolTipService.ToolTip>
        <local:CustomToolTip
            Content="?"
            Placement="Top"
            Source="{x:Bind ButtonControl, Mode=OneWay}" />
    </ToolTipService.ToolTip>
</Button>

如果没有此依赖属性,是否有其他解决方案来获取父母?

c# c#-4.0 uwp winui-3 winui
© www.soinside.com 2019 - 2024. All rights reserved.