找回密码
 立即注册

QQ登录

只需一步,快速开始

heyixiaoran

论坛元老

6

主题

26

帖子

9032

积分

论坛元老

积分
9032

活字格认证微信认证勋章元老葡萄

heyixiaoran
论坛元老   /  发表于:2014-8-4 14:24  /   查看:12778  /  回复:13
想问下多选的C1ComboBox 怎么改,我想把每一项都变成CheckBox,选中的都显示在最上边

13 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2014-8-4 16:00:00
沙发
回复 1楼heyixiaoran的帖子

你好。你的需求是点击下拉可出现CheckList,以方便用户多选?
如下图:

1.可以自定义一个类继承自C1.WPF.C1ComboBox,重写OnItemsSourceChanged、OnApplyTemplate,并新增了依赖属性DependencyProperty SelectedItemsProperty用于输出选择的下拉项。
2.重写C1ComboBox.ItemTemplate为CheckBox。
具体的做法,请参考我们的技术博客:
http://blog.gcpowertools.com.cn/ ... SelectComboBox.aspx
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
heyixiaoran
论坛元老   /  发表于:2014-8-7 19:12:00
板凳
回复 2楼Alice的帖子

直接改掉样式就可以吧,这样很复杂啊,下拉选项改成CheckBox,创建一个Model类,context 和isSelected ,显示的那里binding 选中的 context属性,只是我看不懂模板,不知道哪个是下拉那个
回复 使用道具 举报
heyixiaoran
论坛元老   /  发表于:2014-8-8 10:56:00
地板
回复 2楼Alice的帖子




默认状态有BUG

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-8 12:22:00
5#
回复 3楼heyixiaoran的帖子

重写ItemTemplate如下:
  1. <c1:C1ComboBox.ItemTemplate>
  2.              <DataTemplate>
  3.              <CheckBox Name="templateCheckbox"    Content="{Binding Title}"                IsChecked="{Binding IsSelected}" Checked="templateCheckbox_Checked"   Unchecked="templateCheckbox_UnChecked" />
  4.              </DataTemplate>
  5. </c1:C1ComboBox.ItemTemplate>
复制代码

就是这个模板将C1Combo变成Item都是checkBox的样子。
其他的哪里不懂,可以针对性的提出来,我给你讲。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
heyixiaoran
论坛元老   /  发表于:2014-8-11 18:50:00
6#
回复 5楼Alice的帖子

Template会找3个控件,我就直接copy 过来了
有个C1TextEditableContentControl ,这个应该是显示的那个,但是我Binding 不好使,是绑错控件了吗?
突然发现这个也有BUG,就是默认的时候里边总是显示CheckBox的框,虽然有时没有,这是怎么回事呢?



这段代码里有3个是不能少的,DropDown,ComboHeader,ScrollViewer,把显示值绑到ComboHeader 上没好使,还有BUG

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-12 16:32:00
7#
回复 6楼heyixiaoran的帖子

总结下你的需求,看看我理解上是否有偏差:
1.默认情况下显示checkbox,需要去掉,这个我看看有没有办法。
2.给ComboBox添加项目,ComboBox的Item是在例子中的ViewModel.cs文件下的ViewMode方法里添加的。如下:
  1.         public ViewModel()
  2.         {
  3.             Items = new ObservableCollection<Node>();
  4.             Items.Add(new Node("北京"));
  5.             Items.Add(new Node("上海"));
  6.             Items.Add(new Node("深圳"));
  7.             Items.Add(new Node("西安"));

  8.             SelectedItems = new ObservableCollection<Node>();
  9.             SelectedItems.Add(Items[0]);
  10.             SelectedItems.Add(Items[3]);
  11.         }
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
heyixiaoran
论坛元老   /  发表于:2014-8-12 17:24:00
8#
回复 7楼Alice的帖子

Header 里不能显示CheckBox 的框,只显示 “北京、上海” 这种
数据源是从ViewModel里赋值的,没错
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-8-12 18:13:00
9#
回复 8楼heyixiaoran的帖子

我理解了。我尝试改下。
修改代码需要时间,如果改好了我会回复你。
如果你有什么更好的想法或是实现了也可以给我反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
heyixiaoran
论坛元老   /  发表于:2014-8-20 15:06:00
10#
回复 9楼Alice的帖子

(((C1TextEditableContentControl)  (((Panel) (((C1DropDown) ((Panel) (((Grid) (VisualTreeHelper.GetChild(MultiSelectC1Combobox, 0))).Children[1]) .Header)).Children[1])))
用这个方法取到了C1TextEditableContentControl ,再赋值.EditTextBox.Text,显示时还是没有值,用SNOOP看,还要下找3层,找到javascript:;

这里的2位置的赋值Text就好使了,
var textControl = (((C1TextEditableContentControl)(((Panel)(((C1DropDown)((((Grid)(VisualTreeHelper.GetChild(MultiSelectC1Combobox, 0))))).Children[1]).Header)).Children[1])).ContentControl).Parent.FindChildren<C1TextBoxBase>().FirstOrDefault();
                textControl.Text = Text;

这样找到2的位置了,为什么还是不显示?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部