1

我正在使用 Xceed 数据网格,并且正在尝试更改 RowSelectorPane 背景颜色。我尝试在 XAML 中执行此操作,但它会给我一个编译器错误,指出它无法创建我的数据网格控件。任何建议将不胜感激。

<xcdg:DataGridControl Background="Transparent" Name="dgControl" SelectionUnit="Cell" >
    <!--<xcdg:RowSelectorPane Background="Transparent" />-->
</xcdg:DataGridControl>
4

1 回答 1

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 本身。不幸的是,这不是可样式化的。有2个选项:

  1. 按照 Xceed 论坛上的建议重写 TableViewScrollViewer 控件模板。但这是对大部分 xaml 进行繁琐的复制粘贴工作,并更改您想要让它看起来像您的方式的那一小部分。

  2. 或以下小技巧:

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

xml: <xcdg:DataGridControl ItemsSource="{Binding}" Name="_dataGrid" Loaded="dataGridLoaded" etc...>

于 2012-12-06T08:02:13.203 回答