视图不能由多个 ListView 共享 (View can't be shared by more than one ListView) 的一个解决方法
1.问题的起因
在WPF中遇到一异常,如题。
因此做一个Demo代码来复现问题,代码如下:
<Window x:Class="WpfAppThread.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="" Width="">
<Grid>
<Grid.Resources>
<Style x:Key="Style1" TargetType="ListView">
<Setter Property="View">
<Setter.Value>
<GridView></GridView>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources> <ListView Name="ListView1" Style="{StaticResource Style1}">
</ListView> <ListView Name="ListView2" Style="{StaticResource Style1}">
</ListView>
</Grid>
</Window>
实质上就是把ListView的View视图定义放到了style中,然后两个ListView都使用了同一个style,结果,不必运行,编辑器就能提示错误:View can't be shared by more than one ListView,如下图:

当然了,实际的程序中我们大多是通过程序创建的ListView并为它指定style的,但报出来的异常和这个简单的Demo是一样的。
2.为什么会有这个问题呢?
Msdn上有篇文章(ListView 概述 http://msdn.microsoft.com/zh-cn/library/vstudio/ms750972.aspx )
摘两句如下:"两个 ListView 控件不能同时共用同一个视图模式。如果尝试将同一视图模式用于多个 ListView 控件,则会出现异常。
若要指定可同时由多个 ListView 使用的视图模式,请使用模板或样式。有关如何将视图定义为 Resources 的示例,请参见 ListView with Multiple Views Sample(具有多个视图的 ListView 示例)。"
由此可见,这个异常就是因为两个 ListView 控件不能同时共用同一个视图模式引起的。
3.怎么解决呢?
看到有帖子说使用X:Shared="false",试了一下,不行,还是报同样的异常。
其实,试着去掉ListView的View属性及再下级GridView定义,就发现不会引起异常,也就是说,ListView是从ListBox继承而来,如果不用View视图,那用的就仍然是ListBox那一套,而那一套因为相对简单,所以WPF支持,因此运行正常,而一旦使用了View及GridView,因为比较复杂,里面还有可能涉及多个不同子类及对象的创建,所以WPF就不支持了,索性禁止多个ListView共享同一个View视图。
而这样一来,其实解决方法也就有了,既然关闭这扇窗,那就开了另一扇窗,干脆我们就不共享View视图了,让每个ListView都使用自己的View视图就ok了,修改代码如下:

4.总结
把View和GridView从style里挪回到ListView中,就不会再报这个异常了,也就是说,让每个ListView都生成自己独立的View,这就好了,至于style,只把能共享的留下即可,例如宽度。
视图不能由多个 ListView 共享 (View can't be shared by more than one ListView) 的一个解决方法的更多相关文章
- Android ListView在增加HeaderView之后使用getLocationInWindow和getLocationOnScreen获得值不正确的解决方法
近日遇到一个很恶心的问题,把解决方法放到空间里来分享给大家: 问题发生的条件: 1)ListView 控件中使用addHeaderView,为其添加了一个header view.(基本常识:heade ...
- ListView点击事件失效(item里面有button按钮控件)解决方法
ListView点击事件失效解决方法: 一般出现这个情况,就是你的item里面有按钮的点击事件,你的item里面有button控件,button控件是抢占焦点的,只要在你的item布局里面这样子写就可 ...
- MVC的view页面内嵌C#语法发现路径被转码的解决方法
一,上视图代码,如下 console.log('@urlquery.ToString()'); console.log('@Html.Raw(urlquery.ToString())'); 二,显示结 ...
- android 修改listview item view 的方法(转)
android 修改listview item view 的方法 具体的解答办法很简单: 代码如下 : 1.获取需要更新的view int visiblePosition = mListView. ...
- android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。
我们直接入主题.所有问题例子请参照下图 1,怎样使图片具有点击事件? 答: 解决方法: 在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick. g ...
- Listview的onItemClickListener无法响应的解决方法(转)
转:http://www.cnblogs.com/androidez/archive/2013/03/08/2950425.html 开发中很常见的一个问题,项目中的listview不仅仅是简单的文字 ...
- ListView 里面嵌套 GridView 遇到的问题及其解决方法。
我们直接入主题.所有问题例子请参照下图 1,怎样使图片具有点击事件? 答: 解决方法: 在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick. g ...
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...
- Android 中 ListView Adapter getView 被多次调用问题 解决方法
执行多次原因是因为每显示一个VIew,它都去测量view的高度,执行measure方法,导致getView执行多次. 解决方法是将 ListView 的 layout_width 设置为 fill_p ...
随机推荐
- 微信小程序 - 3d轮播图组件(基础)
<!-- 目前仅支持data数据源来自banner,请看测试案例 ################ 以上三种形式轮播: 1. basic 2. 3d 3. book basic即普通轮播 3d即 ...
- 树莓派中GPIO针角定义图
一.上图 二.上图
- MySql SqlServer Sqlite中关于索引的创建
最近要更新Cocon90.Db库,令其ORM创建表时实现索引的添加.因此总结下列常用Sql,供大家学习与参考. 一.SqlServer中创建索引可以这样: ) Create Table Test ( ...
- app_offline.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...
- java第二节 基本数据类型
class Lesson2 { public static void main(String[] args) { //----------------------------------- //@Da ...
- codevs 2185 最长公共上升子序列
题目链接: codevs 2185 最长公共上升子序列codevs 1408 最长公共子序列 题目描述 Description熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升 ...
- Chrome 好玩的插件
1 Lastpass : 用来把往各个网址的密码云端存储. 2 EditThisCookie : 查看网页的Cookie 3 Postman Interceptor : 用来配合Postman 进 ...
- GNU Linux系统变量(sysctl配置命令)综合使用
查看全部kernel变量的值 sysctl -a 怎样查看一个系统变量的值 1).cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 2).s ...
- UCCI协议[转]
象棋百科全书 中国象棋电脑应用规范(五) 中国象棋通用引擎协议 版本:3.0 象棋百科全书网 (webmaster@xqbase.com) 2004年12月初稿,2007年11月修订 一.概述 中国象 ...
- Android轻量级ORM框架ActiveAndroid入门教程(转)
注:没有找到出处,如有侵犯,请告知 开始ActiveAndroid神奇之旅: 在AndroidManifest.xml中我们需要添加这两个 AA_DB_NAME (数据库名称,这个name不能改,但是 ...