吵吵   2015-02-21  阅读:1,753

继续上一篇讲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、还有第四种方法么?有的,啥方法,自己继承控件改改呗!

郁闷!请问大侠有招不?

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

2条回应:“WPF DataGrid编辑的问题”

  1. 315返佣网-客服说道:

    说的不错那么问题来了白银返佣哪家强315返佣网找国强www.315fanyong.comwww.baiyinshijia.comwww.shuafanyong.comwww.69996999.com

  2. 加油说道:

    说的不错那么问题来了白银返佣哪家强315返佣网找国强www.315fanyong.comwww.baiyinshijia.comwww.caiyoulianmeng.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注