0

我的问题是关于页面表单中的 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();
    }
}

我的绑定反射器:

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

3 回答 3

0

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

于 2012-05-05T03:11:54.570 回答
0

我在理解您的要求时遇到了一些麻烦,但这也许会有所帮助。要制作仅按整行选择的表格,可以将 SelectionMode 设置为 FullRowSelect。然后,无论何时您单击表格上的任意位置,您都会获得所单击单元格的整行。

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

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

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

于 2012-05-04T23:09:43.870 回答
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 >

简单但烦人..

谢谢你的帮助!

于 2012-05-07T20:44:52.597 回答