Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置颜色选择数据网格的整行,以及更改背景颜色后鼠标悬停的行为_C#_Wpf_Datagrid_Mouseover_Selecteditem - Fatal编程技术网

C# 设置颜色选择数据网格的整行,以及更改背景颜色后鼠标悬停的行为

C# 设置颜色选择数据网格的整行,以及更改背景颜色后鼠标悬停的行为,c#,wpf,datagrid,mouseover,selecteditem,C#,Wpf,Datagrid,Mouseover,Selecteditem,我的问题是关于页面表单中的数据网格,使用C#.NET 4.0编程。该应用程序用于桌面,而不是web或Silverlight 我对页面的DataGrid进行了更改,而不是更改了背景。不幸的是,当我选择一行时,它只会更改为蓝色(选择标识的颜色)只会影响该行的列。在这些数据网格中,我还有一些空间。我需要做的是,完全选择那一行,包括空白 另一件已经改变的事情是鼠标在任何记录上时的行为。在这种改变之后,现在这种行为不再发生了 知道我需要做什么吗 编辑:添加代码: 我的转换器: public class R

我的问题是关于页面表单中的数据网格,使用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();
    }
}
公共类RetronacorFundoGrid:DependencyObject,IValueConverter
{
公共静态从属属性corfundogridParameter解释属性=
DependencyProperty.Register(“CorFundoGridParameter”、typeof(IEnumerable)、typeof(RetronacorFundoGrid));
公共IEnumerable CorFundoGridParameter
{
获取{return((IEnumerable)GetValue(CorFundoGridParameterPerProperty));}
set{SetValue(CorFundoGridParameterProperty,value);}
}
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
尝试
{
if(系统转换为16(值)<5)
蓝紫罗兰;
if(系统转换为16(值)<15)
返回笔刷.CadetBlue;
其他的
珊瑚;
}
捕获(例外)
{
返回刷。黑色;
}
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
我的绑定反射镜:

<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>

我在理解你的要求方面有点困难,但这可能会有所帮助。要制作仅按整行选择的表格,可以将SelectionMode设置为FullRowSelect。然后,无论何时单击表上的任何位置,都会得到所单击单元格的整行

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

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

不确定鼠标悬停的行为是怎么回事。

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

我发现了我的问题。。。我们使用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 >

很简单,但很烦人


谢谢你的帮助

不,不,不。。。实际上我可以改变我的背景色。我的问题是,当我这样做并选择一行时,并不是整行都会改变选择的颜色,因为我的网格中没有列。由于仍然有空间容纳更多的2或3列,因此我希望使此选择颜色完全填充行网格,即使没有更多的列可填充。可以澄清我的问题吗?我在问题中添加了一些代码。我已经将样式设置为rowStyle。我需要填充行,其中没有数据或列,但网格上剩余的空间。把鼠标移过去。更好的澄清:我们已经创建了一个从DataGrid继承的组件。我们在这个组件中定义MouseOver。这就是我们的问题所在,因为它会自动产生这种鼠标悬停效果,只有在我添加了这种颜色转换之后,我们的鼠标悬停和整行颜色选择才会出现问题。