我正在使用Xceed数据网格,我正在尝试更改RowSelectorPane背景颜色。我试图在XAML中执行此操作,但它会给我一个编译器错误,指出它无法创建我的数据网格控件。任何建议都将不胜感激。
<xcdg:DataGridControl Background="Transparent" Name="dgControl" SelectionUnit="Cell" >
<!--<xcdg:RowSelectorPane Background="Transparent" />-->
</xcdg:DataGridControl>
答案 0 :(得分:3)
更新2 :浏览Xceed文档和Xceed论坛,我发现你必须在每个DataRow上设置RowSelectorStyle。
<Grid.Resources>
<Style x:Key="mySelectorStyle" TargetType="{x:Type xcdg:RowSelector}">
<Setter Property="Background" Value="LightGreen"/>
<Setter Property="BorderBrush" Value="DarkGreen"/>
</Style>
<Style TargetType="{x:Type xcdg:DataRow}">
<Setter Property="xcdg:RowSelector.RowSelectorStyle"
Value="{StaticResource mySelectorStyle}" />
</Style>
</Grid.Resources>
更新3 你是对的我错过了行部分之外的部分:rowselectorpane本身。不幸的是,这不是风格。 有两个选项:
按照Xceed论坛的建议重写TableViewScrollViewer controltemplate。但是,对于xaml的大部分内容来说,这是繁琐的复制粘贴工作,并且要改变那些你想让它看起来很小的部分。
或者下面的小黑客:
private void dataGridLoaded(object sender, RoutedEventArgs e)
{
var rowSelectorPane = TreeHelper.FindVisualChild<RowSelectorPane>(_dataGrid);
if (rowSelectorPane != null)
{
rowSelectorPane.Background = Brushes.LightGreen;
}
}
public static class TreeHelper
{
public static TChildItem FindVisualChild<TChildItem>(DependencyObject obj) where TChildItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is TChildItem)
return (TChildItem)child;
TChildItem childOfChild = FindVisualChild<TChildItem>(child);
if (childOfChild != null)
return childOfChild;
}
return null;
}
}
的Xaml:
<xcdg:DataGridControl ItemsSource="{Binding}" Name="_dataGrid" Loaded="dataGridLoaded" etc...>