我为Xamarin Forms Label控件创建了自定义渲染器,以启用文本选择和自动链接功能。它很棒。但是当我在ListView中使用Control时,它不会触发选择模式。当我长按文本时,我在输出窗口中看到以下消息。
W / TextView(2440):TextView不支持文本选择。行动模式已取消。
有关如何在ListView中进行此操作的任何想法吗?
以下是我对此控件的实现。
PCL中的控制定义
public class LinkLabel:Label
{
}
Android自定义渲染器
class LinkLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
if (Control != null)
{
Control.AutoLinkMask = Android.Text.Util.MatchOptions.All;
Control.SetTextIsSelectable(true);
Control.Focusable = true;
Control.FocusableInTouchMode = true;
//line below was required to make autodetected links clickable when used inside a ListView. Worked fine outside ListView without this line.
Control.MovementMethod = LinkMovementMethod.Instance;
}
}
}
}
这就是我的xaml查找ListView的方式,我在ViewCell中使用LinkLabel控件。
<ListView x:Name="NotesListView"
ItemsSource="{Binding Notes}"
HasUnevenRows="True" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Spacing="4"
VerticalOptions="CenterAndExpand" >
<!--Notes-->
<Controls:LinkLabel Text="{Binding Notes}"
Style="{StaticResource ListItemHeader}"/>
<Label Text="{Binding FormattedDetails}"
Style="{StaticResource ListItemDetail}"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>