本帖最后由 open382000 于 2013-12-29 14:52:43 编辑

解决方案 »

  1.   

    (1)你可以取消行选中的样式,删除下面这段样式即可<Trigger Property="IsSelected" Value="True">
                    <Setter Property="Foreground" Value="Black"/>
                    <Setter Property="Background" Value="DodgerBlue"/>
                </Trigger>同时添加一个EditingElementStyle设置处于编辑状态的样式
    (2)
    这个你可以通过DataGrid的CurrentCell可以获取到当前的单元格以及所在的列,再通过SelectedIndex等获取到当前的行,或者通过CurrentCellChanged事件,都可以获取到相关信息,然后设置你的下一个位置为CurrentCell,调用BeginEdit即可(还有CancelEdit和CommitEdit分别是取消和提交)
      

  2.   


    <!--行样式触发-->
        <!--背景色改变必须先设置cellStyle 因为cellStyle会覆盖rowStyle样式-->
        <Style  TargetType="DataGridRow">
            <Setter Property="Background" Value="White" />
            <Setter Property="Height" Value="25"/>
            <Setter Property="Foreground" Value="Black" />
            <Style.Triggers>
                <!--隔行换色-->
                <Trigger Property="AlternationIndex" Value="0" >
                    <Setter Property="Background" Value="#ecf6fc" />
                </Trigger>
                <!--<Trigger Property="AlternationIndex" Value="1" >
                    <Setter Property="Background" Value="#ecf6fc" />
                </Trigger>-->
     
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="LightGray"/>
                    <Setter Property="Foreground" Value="White"/>
                </Trigger>
     
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Foreground" Value="Black"/>
                    <Setter Property="Background" Value="DodgerBlue"/>
                </Trigger>
            </Style.Triggers>
        </Style>你的选中背景来自这里的IsSelected中的DogerBule,如果你都去掉了,它难道还会有这么个颜色?
      

  3.   

    没办法吧,无论鼠标移动,还是你要求的键盘操作,都是会选中行了,控件本身并没有这样的区分,如果一定要区分的话,你试试写个新的控件,继承子DataGrid,定义一个EventSource的依赖属性,然后设计样式:
    <Trigger Property="EventSource" Value="Mouse">
                    <Setter Property="Foreground" Value="Black"/>
                    <Setter Property="Background" Value="DodgerBlue"/>
    </Trigger>
    修改成这样的
    同时为你的控件注册Key和Mouse的事件,动态调整EventSource为Mouse或者Key
    这个思路就是这样,你可以试试。
    最复杂的情况就是你完全自写一个新的类似DataGrid的控件(这个是最笨最不理想的方法了)
      

  4.   

    没办法吧,无论鼠标移动,还是你要求的键盘操作,都是会选中行了,控件本身并没有这样的区分,如果一定要区分的话,你试试写个新的控件,继承子DataGrid,定义一个EventSource的依赖属性,然后设计样式:
    <Trigger Property="EventSource" Value="Mouse">
                    <Setter Property="Foreground" Value="Black"/>
                    <Setter Property="Background" Value="DodgerBlue"/>
    </Trigger>
    修改成这样的
    同时为你的控件注册Key和Mouse的事件,动态调整EventSource为Mouse或者Key
    这个思路就是这样,你可以试试。
    最复杂的情况就是你完全自写一个新的类似DataGrid的控件(这个是最笨最不理想的方法了)
    那问下这位老师,,我看了那个access里面的那些表。。也是这样行选变色,但是点单元格的时候 就显示单元格的边框变色。。这样是如何做到的呀
      

  5.   

    没办法吧,无论鼠标移动,还是你要求的键盘操作,都是会选中行了,控件本身并没有这样的区分,如果一定要区分的话,你试试写个新的控件,继承子DataGrid,定义一个EventSource的依赖属性,然后设计样式:
    <Trigger Property="EventSource" Value="Mouse">
                    <Setter Property="Foreground" Value="Black"/>
                    <Setter Property="Background" Value="DodgerBlue"/>
    </Trigger>
    修改成这样的
    同时为你的控件注册Key和Mouse的事件,动态调整EventSource为Mouse或者Key
    这个思路就是这样,你可以试试。
    最复杂的情况就是你完全自写一个新的类似DataGrid的控件(这个是最笨最不理想的方法了)
    那问下这位老师,,我看了那个access里面的那些表。。也是这样行选变色,但是点单元格的时候 就显示单元格的边框变色。。这样是如何做到的呀
    使用DataGrid的SelectionUnit设置下:
    grid.SelectionUnit = DataGridSelectionUnit.CellOrRowHeader;