天天看点

WPF-多个Expander联动

最近在写一点WPF的控件,说一下需求吧。

产品提出需要设计可折叠的控件,需要的时候点开,展示内容;不需要的时候,点击收起内容。其实WPF里面toolbox有expander这个控件,但是又来了个奇葩的需求:要求一次只能展开一个expander,类似radiobutton的特性,“可以且只能”选中一项。在网上搜了很多资料,不得不佩服Windows是生产力工具这句话。。。

例如:贴吧里面就提出了一种方法,让RadioButton集成Expander的模板,同时绑定RadioButton的IsChecked和Expander的IsExpanded,RadioButton的content和Expander的content(不得不佩服Windows的开发思路)。

F5运行之后,既有了Expander的特性,又兼具RadioButton的group功能,but,Expander的header没了……

有人提出说将Expander header加入到RadioButton中,说的不是很详细,然后我也是刚入门,捣腾了半天也还是不行。

接着找到了一篇博客WPF简易手风琴完美地满足了需求,而且作者提出了两种思路:Expander+listbox和上面贴吧提出的一种方法。第一种略显复杂,第二种作者也只是提了下思路,具体实现没有写出来。我不想用第一种的方法,感觉代码量太大,想着能定义好模板,然后直接在xaml里面添加控件是最方便的。搜了一晚上的Stack Overflow也没有结果。今天早上突然想起来这篇博文里面提到Tag这个属性,于是就想着把Expander的header和RadioButton的Tag绑定在一起,设置RadioButton的Tag,然后再运行,果然,Tag属性绑定到Expander的Header上了。搞定……

后面还需要多学习下Template和Style,感觉很深奥,需要慢慢体会

继续阅读