【发布时间】:2020-05-31 03:51:38
【问题描述】:
在我的 Xamarin Forms 应用程序中,我有一个派生自 ContentView 的自定义视图。在 iOS 和 macOS 上,我想用本机控件 ([UI|NS]SegmentedControl) 替换此视图。所以我创建了一个从 ViewRenderer 派生的渲染器并实现了它。
它工作正常,但有一个缺陷。原始的 Forms 控件(在渲染器中称为 Element)显示在 UISegmentedControl 后面。我的期望是使用 ViewRenderer 时只会呈现原生控件。
对 Forms 元素的外观所做的任何更改都会反映在本机控件上,因此简单地隐藏它或使其透明是行不通的。
这是我的 iOS 渲染器。
public class CustomContentViewRenderer : ViewRenderer<CustomContentView, UISegmentedControl>
{
protected override void OnElementChanged(ElementChangedEventArgs<CustomContentView> e) {
base.OnElementChanged(e);
if (e.NewElement != null ) {
if ( Control == null )
SetNativeControl(new UISegmentedControl(new string[] { "One", "Two", "Three" }));
}
}
}
这里的CustomContentView 是简单地从ContentView 派生的,以BoxView 作为内容。这是它在 iOS 上的样子:
我对渲染器的理解是自定义渲染器完全覆盖表单元素。我在这里错过了什么大事吗?可以使用 ViewRenderer 将 Xamarin ContentView 完全替换为原生控件吗?
编辑:在上面的示例中,我使用 BoxView 作为用于 UWP 的实际跨平台选择器的占位符。真正的控件是包含切换按钮的 StackLayout。这是 macOS 上显示问题的屏幕截图。
最后,设置 Element.Content.IsVisible = false 起作用了。
【问题讨论】:
标签: xamarin.forms