C# WPF - цвет фона вне DataGrid

Я новичок в WPF, и я пытаюсь создать DataGrid с автоматически сгенерированными столбцами. Теперь я стилизовал DataGrid так, как хочу, но возникает проблема, когда DG меньше, чем ParentContent, и это выглядит так.

C# WPF - цвет фона вне DataGrid

Мне не нравится, как выглядит эта белая полоса на правой стороне DG, но я не знаю, как изменить ее цвет. Я хочу, чтобы это выглядело как в DataGridView.

C# WPF - цвет фона вне DataGrid

У меня вопрос: как изменить цвет этой части сетки?

СЕТЕВОЙ КОД

<DataGrid x:Class = "Project.WPF.Grid"
      xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local = "clr-namespace:Project.WPF"
      mc:Ignorable = "d" 
      d:DesignHeight = "50" d:DesignWidth = "200"
      Name = "dgv_grid"
      Height = "Auto" Width = "Auto"
      AutoGenerateColumns = "True" 
      SelectionMode = "Single"
      ItemsSource = "{Binding}" 
      DataContext = "{Binding}"
      Background = "#ABABAB" 
      SelectionUnit = "FullRow"
      CanUserAddRows = "False"
      CanUserReorderColumns = "False"
      CanUserResizeColumns = "True"
      CanUserResizeRows = "False"
      IsReadOnly = "True"
      GridLinesVisibility = "None"
      HorizontalGridLinesBrush = "#A0A0A0"
      VerticalGridLinesBrush = "#A0A0A0"
      BorderThickness = "1"
      BorderBrush = "#636363"
      EnableColumnVirtualization = "True"
      RowHeaderWidth = "0"
      ColumnWidth = "Auto"
      Loaded = "dgv_grid_Loaded" 
      AutoGeneratedColumns = "dgv_grid_AutoGeneratedColumns"
      AutoGeneratingColumn = "dgv_grid_AutoGeneratingColumn"
      MouseDoubleClick = "dgv_grid_MouseDoubleClick"
      SelectedCellsChanged = "dgv_grid_SelectedCellsChanged">

<DataGrid.ColumnHeaderStyle>
    <Style TargetType = "{x:Type DataGridColumnHeader}">
        <!--#region Triggers-->
        <Style.Triggers>
            <Trigger Property = "IsMouseOver" Value = "True">
                <Setter Property = "BorderBrush" Value = "#A0A0A0"/>
                <Setter Property = "BorderThickness" Value = "1,1,1,1"/>
            </Trigger>
            <Trigger Property = "IsPressed" Value = "True">
                <Setter Property = "BorderBrush" Value = "#A0A0A0"/>
                <Setter Property = "BorderThickness" Value = "1,1,1,1"/>
                <Setter Property = "Background" Value = "#FFB6B6B6"/>
            </Trigger>
        </Style.Triggers>
        <!--#endregion-->
        <!--#region Setters-->
        <!--<Setter Property = "Height" Value = "Auto"/>-->
        <Setter Property = "FontFamily" Value = "Myanmar Text"/>
        <Setter Property = "FontSize" Value = "12"/>
        <Setter Property = "FontWeight" Value = "SemiBold"/>
        <Setter Property = "Background" Value = "#ffffff"/>
        <Setter Property = "BorderThickness" Value = "1,1,0,1"/>
        <Setter Property = "Padding" Value = "7,5,5,0"/>
        <Setter Property = "BorderBrush" Value = "#e5e5e5"/>
        <Setter Property = "TextBlock.TextAlignment" Value = "Left"/>
        <Setter Property = "VerticalAlignment" Value = "Stretch"/>
        <Setter Property = "TextBlock.TextWrapping" Value = "WrapWithOverflow"/>
        <!--#endregion-->
    </Style>
</DataGrid.ColumnHeaderStyle>

<DataGrid.RowHeaderStyle>
    <Style TargetType = "{x:Type DataGridRowHeader}">

        <Style.Triggers>
            <Trigger Property = "IsMouseOver" Value = "True">
                <Setter Property = "BorderBrush" Value = "#A0A0A0"/>
                <Setter Property = "BorderThickness" Value = "1,1,1,1"/>
            </Trigger>
            <Trigger Property = "IsPressed" Value = "True">
                <Setter Property = "BorderBrush" Value = "#A0A0A0"/>
                <Setter Property = "BorderThickness" Value = "1,1,1,1"/>
                <Setter Property = "Background" Value = "#FFB6B6B6"/>
            </Trigger>
        </Style.Triggers>

        <Setter Property = "Background" Value = "#ffffff"/>
        <Setter Property = "BorderBrush" Value = "#e5e5e5"/>
        <Setter Property = "BorderThickness" Value = "1,1,1,0"/>
        <Setter Property = "Width" Value = "33"/>
        <Setter Property = "Height" Value = "20"/>
    </Style>
</DataGrid.RowHeaderStyle>

<DataGrid.CellStyle>
    <Style TargetType = "{x:Type DataGridCell}">
        <Style.Triggers>
            <Trigger Property = "IsSelected" Value = "True">
                <Setter Property = "Background" Value = "#FF7B7E99"/>
                <Setter Property = "BorderThickness" Value = "0"/>
            </Trigger>
            <Trigger Property = "IsKeyboardFocusWithin" Value = "True">
                <Setter Property = "Background" Value = "#FF4DA2D8"/>
                <Setter Property = "BorderThickness" Value = "0"/>
            </Trigger>
            <Trigger Property = "IsEnabled" Value = "False">
                <Setter Property = "Background" Value = "#ABABAB"/>
            </Trigger>
        </Style.Triggers>
        <Setter Property = "Template">
            <Setter.Value>
                <ControlTemplate TargetType = "{x:Type DataGridCell}">
                    <Grid Background = "{TemplateBinding Background}">
                        <Border BorderBrush = "#a0a0a0" BorderThickness = "1,1,0,0"/>
                        <ContentPresenter VerticalAlignment = "Center" HorizontalAlignment = "Center" Margin = "6,2,6,2"/>
                        <ContentControl FontFamily = "Myanmar Text" FontSize = "20"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</DataGrid.CellStyle>

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
221
2

Ответы 2

Если вы читаете ControlTemplate MSDN для DataGrid:

Стили и шаблоны DataGrid

Вы увидите большое количество кодов. Не знаю, знакомы ли вы с ControlTemplates или нет. но за этими кодами есть ColumnDefinition в ScrollViewer: (Я имею в виду MSDN)

<ScrollViewer x:Name = "DG_ScrollViewer" Focusable = "false" Background = "Black">
     <ScrollViewer.Template>
            <ControlTemplate TargetType = "{x:Type ScrollViewer}">
                 <Grid>
                     <Grid.ColumnDefinitions>
                     <ColumnDefinition Width = "Auto" />
                     <ColumnDefinition Width = "*" />
                     <ColumnDefinition Width = "Auto" />

Вы можете видеть, что это определение заполнит родительский контейнер. потому что ширина среднего столбца равна *, и он заполнит весь родительский элемент.

Я не знаю, как можно избавиться от этого столбца в настройках WPF по умолчанию. но если у вас есть время, чтобы стилизовать свой DataGrid. вы можете изменить ControlTemplate MSDN и удалить эту строку:

 <ColumnDefinition Width = "*" />

так что вы получите то, что дает вам DataGridView.

Я действительно не понимаю, что план кода написан в ссылке, но как удаление строки columndefinition повлияет на мое приложение, потому что, если я хорошо понимаю, вы говорите, что я должен обновить исходный код шаблона WPF DataGrid.

Bruno Ramirez 19.05.2019 05:22

Если вы не хотите, чтобы DataGrid растягивался по горизонтали, вы можете установить для его свойства HorizontalAlignment значение Left:

<DataGrid x:Class = "Project.WPF.Grid" ... HorizontalAlignment = "Left" />

Если вы хотите изменить фон пустой части, вы можете поместить DataGrid в Grid и установить свойство Background для этого: ´

<Grid Background = "Gray">
    <DataGrid ... HorizontalAlignment = "Left" />
</Grid>

Я попробовал первый, но он не дает того эффекта, который дает DGV. Что касается второго, это может быть хорошим решением, но это размещенный элемент управления в приложении Winforms, и у меня есть строки, написанные в классе, например public class CustomGrid : DataGrid, переписанный весь код - это не то, что я хочу сейчас, поэтому я не утончаю этот элемент управления в сетке - вот решение :(

Bruno Ramirez 19.05.2019 05:17

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