我想做一堆这样的按钮,但是每个的图标都不一样,之前的想法是定义一个模板,模板的图标地址绑定自定义的依赖属性 public ImageSource IconImage{get{;}set{;}},使用的时候添加依赖属性就可以了
<ControlTemplate>
<Image Name="icon" Source="{Binding Path=IconImage}"></Image>
</ControlTemplate>
但是后台并不能检测到模板内icon这个控件,所以没办法把依赖属性绑定给icon。最没办法的办法是每一个button给它定义一个ImageSource写死的模板,也就是说每增加一个按钮都得增加一套模板,实在不想这么干,求解决方法,不胜感激。
Source="{Binding Icon, ElementName=icButton}"的办法还是没解决,这个绑定的是元素名字,换个名字就绑定不上了
不要被wpf格式化了。
写个按钮,写个IconName属性(指向资源名称),该类实现IconName资源到显示的绑定或者其他方式即可。
模版的滥用会使代码项目管理,代码复杂度等造成很大问题。
可以使用TemplateBinding
templateBinding我只知道 Text="{TemplateBinding ContentControl.Content}"能绑定content,绑定自定义的图片我并不知道怎么办,这个图标位置要求在button的最左侧的正方形中,并不是background哦,能给段代码吗?
@infinite_loop: Content 都能,换成别的不也一样么
@长蘑菇星人: 不一样,content是button的依赖属性所以才能用,icon是自定义的模板的内容,不是button的依赖属性。有个办法是给button加一个icon的属性,写到程序集里去,然后就能用contentControl.icon引用了。问题来了,怎么给button添加icon属性啊
@infinite_loop: 继承button呀。
@长蘑菇星人: 这种方法失败了,继承的话结果是这样的:错误 无法找到类型“ContentControl”上的静态成员“IconProperty”。
最后还是我之前的想法实现了Source="{Binding Icon, ElementName=icButton}",
icButton:button,还是非常感谢解答,有空的话可以研究怎么用继承这种方法实现
自定义一个用户控件不就可以了,以后都用这个控件