能否在CarouselView中嵌套另一CarouselView?嵌套报错问题求助
问题原因
你遇到的Value cannot be null报错和内层显示异常,本质是同一个问题:单个View实例不能被多次挂载到应用的视觉树中。
你当前的写法直接将ContentView实例作为CarouselView的ItemsSource数据源,同时在ItemTemplate中将该实例绑定到另一个ContentView的Content属性,相当于让同一个View同时属于两个父元素,运行时要么触发空引用错误,要么出现渲染异常。
解决方案
因为你这里外层、内层轮播的项都是固定数量,不需要动态绑定,直接使用CarouselView.Items属性添加子项即可,不需要设置ItemsSource和ItemTemplate,避免View实例复用的问题。
修正后代码
<CarouselView x:Name="outerCarousel"> <CarouselView.Items> <!-- 第一个外层轮播项 --> <ContentView> <Frame BackgroundColor="Red" /> </ContentView> <!-- 第二个外层轮播项,包含内层CarouselView --> <ContentView> <Frame> <CarouselView x:Name="innerCarousel" Margin="50"> <CarouselView.Items> <!-- 第一个内层轮播项 --> <ContentView> <Frame BackgroundColor="Green" /> </ContentView> <!-- 第二个内层轮播项 --> <ContentView> <Frame BackgroundColor="Blue" /> </ContentView> </CarouselView.Items> </CarouselView> </Frame> </ContentView> </CarouselView.Items> </CarouselView>
如果后续需要实现动态生成轮播项的需求,不要把View实例作为数据源,改为创建纯数据模型类,在ItemTemplate中根据数据生成全新的View实例即可避免该问题。
内容的提问来源于stack exchange,提问作者ttirrell
相关产品推荐
相关产品推荐

