Как изменить цвет фона Xceed RowSelectorPane

Я использую сетку данных Xceed и пытаюсь изменить цвет фона RowSelectorPane. Я попытался сделать это в XAML, но это привело бы к ошибке компилятора о том, что он не может создать мой элемент управления сеткой данных. Любой совет будет принята с благодарностью.

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

1 ответ

Решение

ОБНОВЛЕНИЕ 2: просматривая документацию Xceed и форумы Xceed, я обнаружил, что вы должны установить RowSelectorStyle для каждого DataRow.

     <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 Вы правы, я пропустил детали за пределами секции строк: сама панель выбора строк. К сожалению, это не в стиле. Есть 2 варианта:

  1. Перепишите шаблон элемента управления TableViewScrollViewer, как предложено на форуме Xceed. Но это утомительное копирование и вставка больших частей 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;
        }
    }
    

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

Другие вопросы по тегам