在Xamarin中将鼠标悬停在其上后,超链接标签文本未显示鼠标手形光标

时间:2018-06-11 13:57:05

标签: xaml xamarin xamarin.forms uwp

我正在使用 CustomRenderer 将Label文本作为超链接。我的代码标签显示为带下划线,我们使用 Label.GestureRecognizers 来捕获点击。但是鼠标光标在悬停在超链接文本上后没有显示Hand。

以下是我们正在使用的代码:

共享项目:

  • HyperlinkLabel.cs:

    namespace HyperlinkLabelControl
    {
         public class HyperLinkLabel : Label
            {
            }
    }
    
  • MainPage.xaml中:

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 xmlns:local="clr-namespace:HyperlinkLabelControl"
                 x:Class="HyperlinkLabelControl.MainPage">
        <ContentPage.Content>
            <StackLayout>
                <local:HyperlinkLabel Text="MyHyperLinkLabel" >
                    <Label.GestureRecognizers>
                        <TapGestureRecognizer
                            Command="{Binding BindingContext.MyClickedCommand, Source={x:Reference List}}"
                            CommandParameter="{Binding .}" />
                    </Label.GestureRecognizers>
                    </local:HyperlinkLabel>
            </StackLayout>
        </ContentPage.Content>
    </ContentPage>
    

UWP项目:

  • HyperLinkLabelRenderer.cs:

    [assembly: ExportRenderer(typeof(HyperLinkLabel), typeof(HyperLinkLabelRenderer))]
    namespace HyperlinkLabelControl.UWP.Renderers
    {
        public class HyperLinkLabelRenderer : LabelRenderer
        {
            protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
            {
                base.OnElementChanged(e);
                if (Control != null)
                    Control.TextDecorations = TextDecorations.Underline;
            }
        }
    }
    

请提供方法,鼠标光标将悬停在Xamarin中的超链接文本后显示Hand。

1 个答案:

答案 0 :(得分:1)

  

超链接标签文本在Xamarin

中悬停鼠标后未显示鼠标手形光标

问题是Hyperlink未传递给TextBlock.Inlines。并且Underline枚举仅在线文本样式下提供。您可以在Hyperlink类中添加HyperLinkLabelRenderer,如下所示。

protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
    base.OnElementChanged(e);
    if (Control != null)
    {
        Control.Inlines.Clear();
        var hl = new Hyperlink();
        hl.Inlines.Add(new Run { Text = Element.Text });
        Control.Inlines.Add(hl);
    }

}