C# Xamarin表单:windows应用程序中的工具提示

C# Xamarin表单:windows应用程序中的工具提示,c#,xamarin.forms,tooltip,xamarin.uwp,C#,Xamarin.forms,Tooltip,Xamarin.uwp,我正在使用Xamarin forms PCL构建一个应用程序。我的应用程序将在android、ios、windows 10和windows 8.1上运行 我只需要为windows操作系统实现工具提示控件点击事件。我试过这样做- if(Device.OS == TargetPlatform.Windows) { var tapGestureRecognizer1 = new TapGestureRecognizer(); tapGestureRecognizer1.Tapped +

我正在使用Xamarin forms PCL构建一个应用程序。我的应用程序将在android、ios、windows 10和windows 8.1上运行

我只需要为windows操作系统实现工具提示控件点击事件。我试过这样做-

if(Device.OS == TargetPlatform.Windows)
{
    var tapGestureRecognizer1 = new TapGestureRecognizer();
    tapGestureRecognizer1.Tapped += TapGestureRecognizer1_Tapped1;
    icon1.GestureRecognizers.Add(tapGestureRecognizer1);
}

private void TapGestureRecognizer1_Tapped1(object sender, EventArgs e)
{
    Constant.UserActiveTime = DateTime.Now;
    Windows.UI.Xaml.Controls.ToolTip toolTip1 = new Windows.UI.Xaml.Controls.ToolTip();
    toolTip1.Content = "Hi";
    toolTip1.Visibility = Windows.UI.Xaml.Visibility.Visible;    
}

是否有工具提示控件或任何nuget包的工作示例?

这是我为Xamarin UWP应用程序实现的解决方案

创建自定义stacklayout是因为我想在整个部分上有一个工具提示。这样,您可以添加不同的控件。 主要部分是我使用ClassId来获取工具提示中需要显示的文本,如果您愿意,可以添加自定义属性

希望有帮助:-)

添加了自定义堆栈布局:

public class ToolTipStacklayout :StackLayout
{
}
在UWP中添加渲染器:

public class ToolTipRendererUWP : VisualElementRenderer<StackLayout, StackPanel>
{

    protected override void OnElementChanged(ElementChangedEventArgs<StackLayout> e)
    {
        base.OnElementChanged(e);

        if (Element == null)
            return;            

        if (!string.IsNullOrEmpty(Element.ClassId))
        {
            ToolTip toolTip = new ToolTip();
            toolTip.Content = Element.ClassId;
            ToolTipService.SetToolTip(this, toolTip);
        }         
    }}
公共类ToolTipRenderUWP:VisualElementRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(元素==null)
返回;
如果(!string.IsNullOrEmpty(Element.ClassId))
{
工具提示工具提示=新工具提示();
toolTip.Content=Element.ClassId;
SetToolTip(这个,toolTip);
}         
}}
也来为MAC桌面应用程序实现这一点

以下是MAC的解决方案:

 public class ToolTipRendererMAC : VisualElementRenderer<StackLayout>
{
    protected override void OnElementChanged(ElementChangedEventArgs<StackLayout> e)
    {
        base.OnElementChanged(e);
        if (Element == null)
            return;

        if (!string.IsNullOrEmpty(Element.ClassId))
            this.ToolTip = Element.ClassId;

    }}
公共类ToolTipRenderMac:VisualElementRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(元素==null)
返回;
如果(!string.IsNullOrEmpty(Element.ClassId))
this.ToolTip=Element.ClassId;
}}

你能澄清什么不起作用吗?@Sefe什么都不起作用。没有显示工具提示。您正在创建工具提示,但未将其附加到任何内容。难怪你看不到。检查工具提示的
Parent
属性。如果它是
null
,您的工具提示不会显示,请不要感到惊讶。@Sefe如何添加它的父项。您应该先进行自己的研究。好的起点是和。我找到这些参考资料的时间比你写问题的时间要少。