Listview 列表视图分隔符插入全宽

Listview 列表视图分隔符插入全宽,listview,xamarin,xamarin.ios,xamarin.forms,Listview,Xamarin,Xamarin.ios,Xamarin.forms,所以令我惊讶的是,我还没有在网上找到关于这个问题的任何东西。我正在尝试使我的listview分隔符插入为全宽。我找到了有关tableview的文档。但我也不清楚如何为listview做到这一点?我正在使用Xamarin表单列表视图,试图在iOS上实现这一点。我想我必须编写一个自定义渲染器,因为listview的表单上没有(公开的)属性 这是一幅发生在listview上的很好的图片,尽管显示的图像来自一个关于tableview的问题,而不是listview,但问题似乎是一样的 答案取决于您使用的是

所以令我惊讶的是,我还没有在网上找到关于这个问题的任何东西。我正在尝试使我的listview分隔符插入为全宽。我找到了有关tableview的文档。但我也不清楚如何为listview做到这一点?我正在使用Xamarin表单列表视图,试图在iOS上实现这一点。我想我必须编写一个自定义渲染器,因为listview的表单上没有(公开的)属性

这是一幅发生在listview上的很好的图片,尽管显示的图像来自一个关于tableview的问题,而不是listview,但问题似乎是一样的


答案取决于您使用的是Xamarin Forms 3.0+还是更早版本

Xamarin Forms 3.0及更高版本 Xamarin Forms 3.0及更高版本上的
ListView
现在公开了一个
SeparatorStyle
属性,该属性可以设置为
SeparatorStyle
枚举值,可以是
Default
FullWidth
。这已通过提供

确保将
SeparatorStyle
属性设置为
FullWidth
,以达到想要的效果

在Xamarin Forms 3.0之前 正确的是,没有通过Xamarin表单
列表视图
(最终)公开属性来更改分隔符宽度。如果您想自己更改分隔符,则必须求助于自定义渲染器并实现您在另一个SO问题中发现的内容


作为一种解决方法,您可以禁用分隔符可见性,然后添加一个高度为1的
BoxView
,以模拟全宽分隔符。

我使用自定义渲染器使列表视图分隔符变为全宽

在iOS 11上测试

[assembly: ExportRenderer(typeof(CustomListView), typeof(CustomListViewRenderer))]
namespace MasterDetailNav1.iOS.CustomRenderers
{
    public class CustomListViewRenderer : ListViewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.SeparatorInset = UIEdgeInsets.Zero;
            }
        }
    }
}
[程序集:ExportRenderer(typeof(CustomListView)、typeof(CustomListViewRenderer))]
命名空间MasterDetailNav1.iOS.CustomRenders
{
公共类CustomListViewRenderer:ListViewRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
Control.SeparatorInset=UIEdgeInsets.Zero;
}
}
}
}

这是Xamarin Forms 3.0内置的:

只需在
列表视图
上将
分隔符样式
设置为
默认值
全宽
(请注意,这是一个特定于iOS的平台,Android默认设置全宽):


分隔符全宽:

<ListView ios:ListView.SeparatorStyle="FullWidth"/>

列表视图中的分隔符颜色属性

&当视图单元格中没有内容时删除分隔符


@jdmdevdotnet前几天看到了这件事。@hvaughan3请记住Stefan对链接的评论是有效的,嵌套
StackLayout
而不是使用
BoxView
可能不是性能方面的最佳选择。这一点很好,完全同意您的观点。这就是为什么我自己从来没有实现过链接中的东西。是的,我永远不会这么做,哈哈,我很欣赏链接。我想我们只需要处理非全宽分隔符。太烦人了,这应该是一个属性……它太特定于iOS,无法添加为
ListView
属性。当创建诸如
ListView
之类的抽象时,Xamarin表单必须在所有平台上寻找共同点。很难处理所有可能的使用场景,因此它被忽略了。这有点麻烦,但您可以根据自己的具体需要调整渲染器。这与问题完全无关。OP要求使用分隔符fullwidth,而不是分隔符颜色,或者在ListView的ned处删除额外的分隔符抱歉,因为您可以注意到有一个“:”,因为它应该是fullwidth属性的示例。此外,我认为,当单元没有内容并应用颜色时,显示移除分隔符的例子会很好。我更新了我的评论,请停止哭泣。事实上,当我试图编辑我看到的评论时:但它没有显示出来。
<ListView ios:ListView.SeparatorStyle="FullWidth"/>