设置颜色选择DataGrid的整行,以及更改背景颜色后的MouseOver行为

时间:2012-05-04 21:54:55

标签: c# wpf datagrid mouseover selecteditem

我的问题是关于页面表单中的DataGrid,使用C#.NET 4.0进行编程。该应用程序适用于桌面,而不是Web或Silverlight。

我已经对页面的DataGrid进行了更改,而不是更改后台。不幸的是,当我选择一行时,它只会变为蓝色(标识的颜色被选中)只会影响该行的列。在其中一些数据网格中,我还剩下一些空间。我需要做的是完全选择那一行,包括那个空格。

另一件已发生变化的事情是鼠标悬停在任何记录上时的鼠标行为。在此更改之后,现在不再发生此行为。

任何线索我需要做什么?

修改:添加代码:

我的转换器:

public class RetornaCorFundoGrid : DependencyObject, IValueConverter
{
    public static DependencyProperty CorFundoGridParameterProperty =
        DependencyProperty.Register("CorFundoGridParameter", typeof(IEnumerable<Object>), typeof(RetornaCorFundoGrid));

    public IEnumerable<Object> CorFundoGridParameter
    {
        get { return ((IEnumerable<Object>)GetValue(CorFundoGridParameterProperty)); }
        set { SetValue(CorFundoGridParameterProperty, value); }
    }

    public object Convert(Object value, Type targetType, object parameter, CultureInfo culture)
    {
        try
        {
            if (System.Convert.ToInt16(value) < 5)
                return Brushes.BlueViolet;
            if (System.Convert.ToInt16(value) < 15)
                return Brushes.CadetBlue;
            else
                return Brushes.Coral;
        }
        catch (Exception)
        {
            return Brushes.Black;
        }

    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

My Binding Reflector:

<ut:BindingReflector Target="{Binding Mode=OneWayToSource, Source = {StaticResource RetornaCorFundoGrid}, Path=CorFundoGridParameter}" 
                         Source="{Binding Parameters, Mode=OneWay}" />

我的行样式:

<DataGrid.RowStyle>
    <Style TargetType="{x:Type DataGridRow}">
        <Setter Property="Background" Value="{Binding Path=Id, Converter={StaticResource RetornaCorFundoGrid}}"/>
    </Style>
</DataGrid.RowStyle>

3 个答案:

答案 0 :(得分:0)

我在理解你所要求的东西方面有点麻烦,但也许这会有所帮助。要创建仅按完整行选择的表,可以将SelectionMode设置为FullRowSelect。然后,只要您单击表格上的任何位置,就会得到您单击的单元格的完整行。

对于单元格的着色,您可以遍历当前行中的列,并将BackColor和SelectionBackColor设置为您想要的任何颜色,如下所示:

foreach (DataGridCell cell in myRow.Cells)
{
    cell.Style.BackColor = myColor;
    cell.Style.SelectionBackColor = myColor;
}

不确定鼠标的行为是什么。

答案 1 :(得分:0)

要为DataGrid的整行着色,您需要为定义行背景颜色的DataGrid.RowStyle设置样式。您可能需要将单元格的背景设置为透明(以便不隐藏行颜色)或更改它们以匹配行颜色。此外,您还需要设置选择颜色和处理鼠标悬停事件的EventTrigger。

答案 2 :(得分:0)

我发现了我的问题......我们使用的是ResourceDictionary.xaml。在其中,我们有DataGridRow的行为定义。当我在这个组件中定义它时,我覆盖它。

所以,为了解决这个问题,我添加了一个BasedOn:

<DataGrid.RowStyle>
            <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
                <Setter Property="Background" Value="{Binding Path=Id, Converter={StaticResource RetornaCorFundoGrid}}"/>
            </Style>
        </DataGrid.RowStyle >

简单,但很烦人..

感谢您的帮助!