首页 新闻 会员 周边

WPF模板问题

0
悬赏园豆:10 [已解决问题] 解决于 2017-02-27 09:03

 我想做一堆这样的按钮,但是每个的图标都不一样,之前的想法是定义一个模板,模板的图标地址绑定自定义的依赖属性 public ImageSource IconImage{get{;}set{;}},使用的时候添加依赖属性就可以了

<ControlTemplate>
<Image Name="icon" Source="{Binding Path=IconImage}"></Image>
</ControlTemplate>

但是后台并不能检测到模板内icon这个控件,所以没办法把依赖属性绑定给icon。最没办法的办法是每一个button给它定义一个ImageSource写死的模板,也就是说每增加一个按钮都得增加一套模板,实在不想这么干,求解决方法,不胜感激。

 

Source="{Binding Icon, ElementName=icButton}"的办法还是没解决,这个绑定的是元素名字,换个名字就绑定不上了

问题补充:

Source="{Binding Icon, ElementName=icButton}"的办法还是没法解决,这个绑定的是元素名字。换个名字就绑定不上了

infinite_loop的主页 infinite_loop | 初学一级 | 园豆:184
提问于:2017-02-24 10:38
< >
分享
最佳答案
0

不要被wpf格式化了。

写个按钮,写个IconName属性(指向资源名称),该类实现IconName资源到显示的绑定或者其他方式即可。

模版的滥用会使代码项目管理,代码复杂度等造成很大问题。

收获园豆:4
花飘水流兮 | 专家六级 |园豆:13560 | 2017-02-24 19:57
其他回答(2)
0

可以使用TemplateBinding


收获园豆:3
长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-02-24 10:44

templateBinding我只知道  Text="{TemplateBinding ContentControl.Content}"能绑定content,绑定自定义的图片我并不知道怎么办,这个图标位置要求在button的最左侧的正方形中,并不是background哦,能给段代码吗?

支持(0) 反对(0) infinite_loop | 园豆:184 (初学一级) | 2017-02-24 11:04

@infinite_loop: Content 都能,换成别的不也一样么


支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-02-24 11:06

@长蘑菇星人: 不一样,content是button的依赖属性所以才能用,icon是自定义的模板的内容,不是button的依赖属性。有个办法是给button加一个icon的属性,写到程序集里去,然后就能用contentControl.icon引用了。问题来了,怎么给button添加icon属性啊

支持(0) 反对(0) infinite_loop | 园豆:184 (初学一级) | 2017-02-24 11:34

@infinite_loop: 继承button呀。


支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-02-24 11:36

@长蘑菇星人: 这种方法失败了,继承的话结果是这样的:错误 无法找到类型“ContentControl”上的静态成员“IconProperty”。

最后还是我之前的想法实现了Source="{Binding Icon, ElementName=icButton}",

icButton:button,还是非常感谢解答,有空的话可以研究怎么用继承这种方法实现

支持(0) 反对(0) infinite_loop | 园豆:184 (初学一级) | 2017-02-24 13:18
0

自定义一个用户控件不就可以了,以后都用这个控件

收获园豆:3
龙葛格 | 园豆:782 (小虾三级) | 2017-02-24 20:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册