WPF 自定义控件中,集合属性怎么做?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 自定义控件中,集合属性怎么做?相关的知识,希望对你有一定的参考价值。

在WPF中,自定义一个控件,在这个控件里有一个属性是集合类型的list<object>类型的,但是怎么定义依赖属性,而且怎么为其写方法,就是和listbox里面的items一样的,我想在使用这个自定义控件的时候,可以在前台添加多个东西到这个属性定义的地方?希望大神指导?
private static DependencyPropertyKey AquariumContentsPropertyKey =
DependencyProperty.RegisterReadOnly(
"AquariumContents",
typeof(List<FrameworkElement>),
typeof(Aquarium),
new FrameworkPropertyMetadata(new List<FrameworkElement>())
);

public List<FrameworkElement> AquariumContents

get return (List<FrameworkElement>)GetValue(AquariumContentsProperty);

这个是MSDN上的,我要处理的和这个差不多,上面的代码知识定义了DP和属性,然后 方法怎么写?比如一些简单的属性,有一个方法的,而这个地方并没有!求指教……

参考技术A 我想先问一个问题,你为何要依赖属性来定义一个类似listbox的Items属性。listbox的Items只是一个实现了INotifyCollectionChanged和INotifyPropertyChanged接口的CollectionView而已。换言之listbox里的items是不能绑定的,如果要绑定数据集合,直接用itemsSource就可以了。我不知道楼主的具体需求是什么,但我觉得没必要用依赖属性根据你的描述。 参考技术B 网上去查依赖属性的定义方式,不懂再追问。
http://msdn.microsoft.com/zh-cn/library/system.windows.dependencyproperty.aspx追问

对于wpf的以来属性,我这个都会的,定义一般的属性,都还可以,但是定义集合属性,就不会了,就是我上面所说的那样,listbox那样的,怎么写相应的方法?求指教?

追答

具体问题具体分析,你想写什么样的控件,也许只是template就可以解决。

追问

那我说的简单点吧!就比如一个自定义控件中有一个listbox,然后别人用这个控件的时候,要通过属性来向listbox中添加东西,我想知道我该怎么写属性,和方法,来实现别人向listbox中添加多个人内容,这个肯定要用到集合类型的,所以求助!

追答

那你就在里面添加一个listbox不就行了吗?

追问

我是说,我自定义的控件中有listbox,但是你是要写依赖属性的,别人用你这个控件的时候,是要向里面添加东西的,这个依赖属性和相应的方法怎么写!………………

追答

不是可以直接访问你的listbox么?要不就把你的源码发到共享看看。问题根本就没问清楚,我问你到底想定义一个什么样的控件,为什么要定义这个控件,又为什么要在里面定义个listbox?

追问

我已经把代码放在了补充问题上,求指教!

追答

你那代码能说明什么问题?直接说你最终要实现的效果,看有什么更好的办法。

追问

要实现的东西很简单的,就是一个自定义的控件中有一个listbox的控件,我只是想在引用这个控件的时候,可以向这个自定义控件里面这个listbox中添加东西,这个肯定是要写依赖属性的……这个我说一遍,你应该就直接明白了,就是集合类型的属性吗?

追答

自定义的控件中有一个listbox的控件---这就是个问题!谁叫你做这控件了,从用户的角度,谁在乎你里面是不是一个listbox,谁又在乎你是否自定义了个控件?

请你从用户的角度来考虑问题,要实现什么功能?

追问

自定义控件中有listbox只是我一个大的自定义控件中的一个小的部分,只是想通过属性往里面添加东西的,只是以前没有接触,集合类型(list)的属性,所以现在不知道怎么写?我的题目其实就已经说的很明白了,你就直接说你会不会吧?

追答

不会问问题,我也不想回答了,看其他人怎么回答。

追问

我的问题问的很明白了,就是集合类型的依赖属性,因为现在WPF做的人还不是很多,所以没有多少人做过相关的,不会也正常,不怪你!不过还是要 谢谢你!

追答

你看我的回答是没做过的?开什么玩笑?

做WPF页面的时候我想通过C#代码触发自定义控件中的事件怎么做

如题
是否可以在.cs中通过C#代码触发自定义控件中自定义的事件?

参考技术A 如果是在xmal里面,比如说一个button click为自定义事件.
这样就注册到了Click事件. <Button Click="Button_Click"/>
在.CS里面直接注册就好了,不明白,这有难度吗?追问

我的意思是在.CS里面掉自定义控件事件,而不是在xaml里面掉!!

参考技术B 要贴代码才知道,其实WPF同Winfrom的设计思路上相同(个人认为)只是界面设计方式改了.!! 在后台代码中可以根据ID或Name(这里记不太清楚了,你可以看看)直接调用! 参考技术C public event EventHandler<EventArgs> OnXXXXX;

if ( this.OnXXXXX != null )

this.OnXXXXX(this,new EventArgs());
参考技术D 没做过啊,也想做做网页

以上是关于WPF 自定义控件中,集合属性怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

怎么给treeview接点增加自定义属性

C#.NET自定义控件怎么动态加载普通控件?

wpf中动态添加的自定义控件过宽,不能完全显示,怎么办

WPF中我想给Image添加一个自定义的ImageSource属性,需要怎么做呢?

wpf 重新加载自定义控件出现异常

请教关于WPF上自定义控件添加事件的问题