介绍

首先介绍下要实现的任务。做一个下拉框,当选择每个项的时候将鼠标发在上面显示该项的ToolTip的内容(Image)。

实现

Model:

     public class SkinInfo : NotificationObject
{
private string name;
private string assemblyName; public string AssemblyName
{
get { return assemblyName; }
set
{
if (this.assemblyName != value)
{
assemblyName = value;
base.RaisePropertyChanged("AssemblyName");
}
}
}
public string Name
{
get { return name; }
set
{
if (this.name != value)
{
name = value;
base.RaisePropertyChanged("Name");
}
}
}
      public string Path { get; set; }
[XmlIgnore]
public ImageSource Image { get; set; }
public SkinInfo()
{ } public SkinInfo(string skin)
{
var items = skin.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
this.Name = items[];
this.AssemblyName = items[];
string uriStr = string.Format("/BasicInfoModule;component/Resources/{0}.png", this.Name);
this.Image = new BitmapImage(new Uri(uriStr, UriKind.Relative));
         this.Path=uriStr;
}
}

ViewModel:

    public class DUTInfo : NotificationObject
{
public ObservableCollection<AccessoryInfo> Accessories { get; set; }
[XmlIgnore]
public ObservableCollection<SkinInfo> Skins { get; private set; }
public DUTInfo()
{
this.Skins = new ObservableCollection<SkinInfo>(
Config.Instance.Skins.Select<string, SkinInfo>(s => new SkinInfo(s)));
}
}

Xaml文件:

   <ComboBox  Grid.Row="" Grid.Column="" ItemsSource="{Binding Skins}" SelectedValue="{Binding SelectedSkin}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name}" Margin="">
<Label.ToolTip>
<Image Source="{Binding Image}" />
</Label.ToolTip>
</Label>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

测试

此时实现啦功能,现在应该测试下,我打开界面点开下拉框,鼠标在每个Item的位置来回切换时,较短时间后会引发异常:

Specified element is already the logical child of another element. Disconnect it first.

(意思:指定的元素已经是另一个元素的逻辑子元素。请先将其断开连接。)

然后我将图片的绑定属性改为 <Image Source="{Binding Path}" />,此时还会触发异常,但是鼠标在每个Item的位置来回切换时间较长,最总还会引发相同异常。

我想应该是:如果不清除他与前一个父控件的关系,则会报此类错误,解决办法是,再重新作为新的父控件的Content之前,清除他的父类绑定即可。

我仔细想了想ToolTip的功能不会这么弱吧,然后我在<Label.ToolTip>之间顺意输入看看包含了那些属性,我发现有一个<ToolTip>。

我加上之后,重新测试,很长一段时间,都没报错,姑且这么认为是解决了吧!!

最总Xaml文件代码ToolTip改为:

 <Label.ToolTip>
<ToolTip>
<Image Source="{Binding Image}" />
</ToolTip>
</Label.ToolTip>

WPF控件ComboBox 每个Item的ToolTip引发的异常的更多相关文章

  1. 6 WPF控件

    WPF控件分类: 内容控件 标题内容控件 文本控件 列表控件 基于范围的控件 日期控件 控件类 控件是与用户交互的元素.控件可以获得焦点,能接受键盘或鼠标的输入. 所有控件的基类是System.Win ...

  2. XMAL语法系列之-(2)---WPF控件继承图

    WPF控件继承图 1 FrameworkElement 1.1 Panel(面板类元素) 1.1.1 Canvas 1.1.2 DockPanel 1.1.3 Grid 1.1.4 TabPanel ...

  3. 重新想象 Windows 8 Store Apps (5) - 控件之集合控件: ComboBox, ListBox, FlipView, ItemsControl, ItemsPresenter

    原文:重新想象 Windows 8 Store Apps (5) - 控件之集合控件: ComboBox, ListBox, FlipView, ItemsControl, ItemsPresente ...

  4. 跟我一起学WPF(2):WPF控件基础

    WPF控件简介 通过上一篇XAML语言的介绍,我们知道,XAML是一个树形结构,同样,WPF控件作为构成整个XAML树的一部分,也是一个树形结构.我们看一个简单的例子. <Button.Cont ...

  5. WPF 控件被禁用,悬浮提示不显示问题

    原文:WPF 控件被禁用,悬浮提示不显示问题 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/89 ...

  6. 【WPF】创建基于模板的WPF控件(经典)

    原文:[WPF]创建基于模板的WPF控件(经典) WPF可以创建两种控件,它们的名字也很容易让人混淆:用户控件(User Control)和定制控件(Customer Control),之所以如此命名 ...

  7. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  8. WPF学习系列之五(WPF控件)

    控件:    1.内容控件------这些控件能够包含嵌套的元素,为它们提供几乎无限的显示能力.内容控件包括Lable,Button 以及ToolTip类. 内容控件是更特殊的控件类型,它们可以包含( ...

  9. wpf控件开发基础(3) -属性系统(2)

    原文:wpf控件开发基础(3) -属性系统(2) 上篇说明了属性存在的一系列问题. 属性默认值,可以保证属性的有效性. 属性验证有效性,可以对输入的属性进行校验 属性强制回调, 即不管属性有无发生变化 ...

随机推荐

  1. mSites and Smarty

    目前的页面实现方式是需要向后台请求接口,返回 JSON 数据,动态拼接字符串塞进 DOM 中(innerHTML).考虑用 Smarty 生成静态页面,可以在后台用 PHP 得到数据,字符串拼接,然后 ...

  2. vue.js+boostrap最佳实践

    一.为什么要写这篇文章 最近忙里偷闲学了一下vue.js,同时也复习了一下boostrap,发现这两种东西如果同时运用到一起,可以发挥很强大的作用,boostrap优雅的样式和丰富的组件使得页面开发变 ...

  3. XML的解析和保存

    1.XML(extensible markup language;XML )  定义:,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.     XML语法规范:  标 ...

  4. 34-nl 简明笔记

    为文本文件添加行号 nl [options] files 参数 files是nl需要为其添加行号的文本文件路径名,如果有多个文件,则nl会把多个文件合在一起编号,并输出到标准输出上 选项 -b     ...

  5. php 实现接收客户端上传的图片

    今天,遇到一个服务端接收客户端上传图片的需求,经过学习.我写了个简单的demo 以备下次学习. 首先服务器接收的发送图片的请求一定要是post请求,而且请求一定要加上 enctype="mu ...

  6. Code.R团队展示

    团队成员: 031302620马凛凛(队长) 031302619吕昆明 031302319汪毓顺 031302404陈俊达 团队名称: Code.R 团队项目: 基于web的教师报课系统 团队成员风采 ...

  7. Hibernate注解映射联合主键的三种主要方式

    今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...

  8. mysql常用方法学习

    环境 create table phople ( id int(11) not null primary key auto_increment, name char(20) not null, sex ...

  9. VS2015中GLAUX库的链接问题

    最近学习OpenGL,照着例子写了个程序,用到了GLAUX库. #include <gl\glaux.h> #pragma comment(lib, "glaux") ...

  10. 学习Spring(三) 设置Bean作用域

    Spring中几种不同的作用域 Singleton     每个Spring IoC容器中创建一个Bean实例 Prototype    每次请求时创建一个新的Bean实例 Request     为 ...