我的问题是关于页面表单中的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>
答案 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 >
简单,但很烦人..
感谢您的帮助!