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) 的一个解决方法的更多相关文章

  1. Android ListView在增加HeaderView之后使用getLocationInWindow和getLocationOnScreen获得值不正确的解决方法

    近日遇到一个很恶心的问题,把解决方法放到空间里来分享给大家: 问题发生的条件: 1)ListView 控件中使用addHeaderView,为其添加了一个header view.(基本常识:heade ...

  2. ListView点击事件失效(item里面有button按钮控件)解决方法

    ListView点击事件失效解决方法: 一般出现这个情况,就是你的item里面有按钮的点击事件,你的item里面有button控件,button控件是抢占焦点的,只要在你的item布局里面这样子写就可 ...

  3. MVC的view页面内嵌C#语法发现路径被转码的解决方法

    一,上视图代码,如下 console.log('@urlquery.ToString()'); console.log('@Html.Raw(urlquery.ToString())'); 二,显示结 ...

  4. android 修改listview item view 的方法(转)

    android 修改listview item view 的方法   具体的解答办法很简单: 代码如下 : 1.获取需要更新的view int visiblePosition = mListView. ...

  5. android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。

    我们直接入主题.所有问题例子请参照下图 1,怎样使图片具有点击事件? 答: 解决方法: 在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick. g ...

  6. Listview的onItemClickListener无法响应的解决方法(转)

    转:http://www.cnblogs.com/androidez/archive/2013/03/08/2950425.html 开发中很常见的一个问题,项目中的listview不仅仅是简单的文字 ...

  7. ListView 里面嵌套 GridView 遇到的问题及其解决方法。

    我们直接入主题.所有问题例子请参照下图 1,怎样使图片具有点击事件? 答: 解决方法: 在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick. g ...

  8. universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

    在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...

  9. Android 中 ListView Adapter getView 被多次调用问题 解决方法

    执行多次原因是因为每显示一个VIew,它都去测量view的高度,执行measure方法,导致getView执行多次. 解决方法是将 ListView 的 layout_width 设置为 fill_p ...

随机推荐

  1. 使用electron+Js开发夸平台(Linux、Win、Mac)的桌面应用程序

    一.开源地址: https://github.com/electron/electron 二.官方网站: https://electron.atom.io/ 三.案例

  2. 1051: 手机(MOBILE)

    #include <iostream> #include <iomanip> #include <cstdlib> #include <string> ...

  3. Spring Jdbc事例说明(三)

    上一篇文章已经讲解了如何使用Spring搭建工程,这一篇文章是接着上一篇文章来描述的. 一.载入依赖 新增加了两个依赖,mysql数据库驱动和alibaba数据源包 <!-- mysql驱动包 ...

  4. RHEL SHELL快捷键

    Shell快捷键 CTRL+a  调到命令行头  e  调到命令行尾 CTRL+u  光标前面的删除  k  光标后面的删除 CTRL+→词的头   词的尾 ESC+.   粘贴上个命令的尾词 杀掉远 ...

  5. Heroku第三方服务接入指南(二)

    上文我们讲了第三方服务.Heroku.用户三者的关系,这一篇进入正题,了解第三方厂商(下文简称厂商)怎样为Heroku开发服务.这里仅仅做简介,了解heroku大致是怎么做的.假设你的平台.希望接入第 ...

  6. 【RS】RankMBPR:Rank-Aware Mutual Bayesian Personalized Ranking for Item Recommendation - RankMBPR:基于排序感知的相互贝叶斯个性化排序的项目推荐

    [论文标题]RankMBPR:Rank-Aware Mutual Bayesian Personalized Ranking for Item Recommendation ( WAIM 2016:  ...

  7. VirtualBox虚拟机增加CentOS根目录容量 LVM扩容

    对于目前的网络开发者来说,比较好的搭档就是Win7+VirtualBox+CentOS的组合,既可以发挥Linux强大的网络服务功能,也可以有效的隔离各项服务拖慢系统,影响系统的运行,对于新手来说可以 ...

  8. 九款命令行工具助力Linux环境下的数据分析

    对于大多数熟悉了图形工作环境的朋友来说,电子表格工具无疑是第一选项.但命令行工具同样能够更快更高效地解决问题——且只须稍微学习即可上手. 大部分此类工具冻严格局限于Linux,而多数可同样运行在Uni ...

  9. java线程池的应用

    package com.test; import java.util.concurrent.Callable; public class TestThread implements Callable& ...

  10. Vue.js 添加组件

    <!DOCTYPE HTML> <html> <head> <title>vue.js hello world</title> <sc ...