继续上一篇讲WPF的事情,话说上一篇已经实现了WPF编辑过后保存数据的问题,正当吵吵欣喜的想继续折腾,把DataGrid的Style搞的漂亮一点的时候,碰到一个前所未有的事情,而且直接折腾了三天也没搞好!
事情是这个样子的,吵吵DataGrid默认的主题是不是有点太难看了,于是乎吵吵想自己改一下,其它的改动都挺顺利的,直到想改动它的选中背景色。
也许你说,这个还不容易么,看我的直接在RowStyle中的IsSeleted中改一下颜色就好了:
<Style x:Key="DataGridRowStyle" TargetType="{x:Type DataGridRow}"> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="{StaticResource SelectedBrush}"/> <Setter Property="Foreground" Value="black"/> </Trigger> </Style.Triggers> </Style>
哈哈,等你改完你会发现,还是没有用啊,为什么?
因为在Row上面还有Cell,等于是Cell把Row给覆盖了,因此,看不到,不信你看看那些没有内容的地方,row的背景色改过来了。
既然是因为Cell,那怎么办?改Cell呗,于是又有了下面的代码:
<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}"> <Setter Property="Background" Value="{x:Null}"/> <Setter Property="BorderThickness" Value="0"/> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="{StaticResource SelectedBrush}"/> <Setter Property="Foreground" Value="black" /> </Trigger> </Style.Triggers> </Style>
好了,现在你看,选中行的背景颜色改过来了,没有时间啥问题了。
你以为这篇文章到这里结束了?错!百度一大把的东西,不太愿意写,也木有意思。但是,我们的噩梦才刚刚开始!
当定义了CellStyle的时候,你去点击CheckBox或者Combobox,你发现失效了,压根编辑不了。通过重写GotFocused事件,你发现压根就获取不到焦点。
于是乎吵吵百度、谷歌了三天,也没有找到彻底的解决办法,莫非这就是微软的一个Bug?
想当初用delphi的stringGrid的时候,发现了两个问题,一个是如果有横向滚动条,拖到后面,一选择行,横向滚动条就又回到最左边来了;第二个问题是滚动条经常性失效,拖动不了。
因为上面说的两个问题,考虑到delphi日薄西山,一怒之下换到WPF下,结果又是DataGrid的问题,老天,你这是玩我么?
郁闷归郁闷,看看解决办法吧!
1、最简单有效的办法,不要去定义CellStyle!那你说界面风格不统一啥的,我也没有办法了。
2、IsEditing。
你不是说无法编辑么,好,我在IsSelected里面加一条 IsEditing=true.
你发现这完全是个馊主意,虽然可以编辑了,但是是这一行都处于编辑状态啊!
3、第三个方法倒是比较可取,就是把DataGridCheckBoxColumn模板重新定义一下,将数据直接绑定到Ischecked上。
自定义的模板中的CheckBox确实是可以点击了,修改数据也是可以的。但是也带来一个问题,就是无法激发EditEnding事件,也就说没有办法通知DataGrid我编辑了这一行,继而就无法知道我编辑了这一行!如果单纯是考虑PropertyChanged的话,也还是有办法的,但是如果继承的是IEditableObject那就没辙了!
4、还有第四种方法么?有的,啥方法,自己继承控件改改呗!
郁闷!请问大侠有招不?
如无特别说明,本博客文章皆为原创。转载请说明,来自吵吵博客。
原文链接:http://chaochaoblog.com/archives/3227
吵吵微信朋友圈,请付款实名加入:
说的不错那么问题来了白银返佣哪家强315返佣网找国强www.315fanyong.comwww.baiyinshijia.comwww.shuafanyong.comwww.69996999.com
说的不错那么问题来了白银返佣哪家强315返佣网找国强www.315fanyong.comwww.baiyinshijia.comwww.caiyoulianmeng.com