Как скрыть стрелку слева от заголовков DataGrid?

1

Проверьте ссылку ниже http://tpstatic.com/img/usermedia/lN3his36gUeN0P0-1csn0A/original.png

То, что я пытаюсь сделать, - это избавиться от стрелки в левом углу. Дело в том, что я делаю свой DataGrid из кода, а не в XAML. Вот код:

DataGrid reportDataGrid = new DataGrid();
reportDataGrid.AutoGenerateColumns = false;
reportDataGrid.CanUserAddRows = false;
reportDataGrid.IsReadOnly = true;
reportDataGrid.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
reportDataGrid.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
reportDataGrid.RowHeaderWidth = 0;
reportDataGrid.HeadersVisibility = DataGridHeadersVisibility.Column;

И некоторые определения столбцов и привязки:

var caseNameCol= new DataGridTextColumn();
caseNameCol.Header = "Case Name";
Binding binding = new Binding("CaseName");
binding.Mode = BindingMode.OneWay;
binding.Source = list;
caseNameCol.Binding = binding;
reportDataGrid.Columns.Add(caseNameCol);

var caseItemNameCol= new DataGridTextColumn();
caseItemNameCol.Header = "Case Item Name";
Binding caseBinding = new Binding("CaseItemName");
caseBinding .Source = list;
caseBinding .Mode = BindingMode.OneWay;
caseItemNameCol.Binding = caseBinding ;
reportDataGrid.Columns.Add(caseItemNameCol);

Все работает нормально, но проблема в том, что стрелка остается в моем datagrid. Любая идея, как удалить его из datagrid?

Теги:
wpf
datagrid

2 ответа

2

Готовьтесь к тому, чтобы спуститься и грязно для этого.

Во-первых, мы собираемся определить ControlTemplate для datagrid. Это будет основано на умолчании с одним незначительным изменением. Шаблон по умолчанию можно найти в MSDN.

<Window.Resources>
    <ControlTemplate x:Key="dgControlTemplate" TargetType="{x:Type DataGrid}">
        <Border x:Name="border"
            SnapsToDevicePixels="True"
            BorderBrush="{TemplateBinding BorderBrush}"
            BorderThickness="{TemplateBinding BorderThickness}"
            Padding="{TemplateBinding Padding}">
            <Border.Background>
                <SolidColorBrush Color="{DynamicResource ControlLightColor}" />
            </Border.Background>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Disabled">
                        <Storyboard>
                            <ColorAnimationUsingKeyFrames Storyboard.TargetName="border"
                                            Storyboard.TargetProperty="(Panel.Background).
                  (SolidColorBrush.Color)">
                                <EasingColorKeyFrame KeyTime="0"
                                     Value="{DynamicResource ControlLightColor}" />
                            </ColorAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                    <VisualState x:Name="Normal" />
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <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" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="*" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>

                            <Button Focusable="false"
                      Command="{x:Static DataGrid.SelectAllCommand}"

                       Loaded="theScaryButton_Loaded"  

                      Style="{DynamicResource {ComponentResourceKey 
                  ResourceId=DataGridSelectAllButtonStyle, 
                  TypeInTargetAssembly={x:Type DataGrid}}}"

                      Visibility="{Binding HeadersVisibility, 
                  ConverterParameter={x:Static DataGridHeadersVisibility.All}, 
                  Converter={x:Static DataGrid.HeadersVisibilityConverter}, 
                  RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                      Width="{Binding CellsPanelHorizontalOffset, 
                  RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>

                            <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter"
                                              Grid.Column="1"
                                              Visibility="{Binding HeadersVisibility, 
                  ConverterParameter={x:Static DataGridHeadersVisibility.Column}, 
                  Converter={x:Static DataGrid.HeadersVisibilityConverter}, 
                  RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />

                            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
                                      Grid.ColumnSpan="2"
                                      Grid.Row="1"
                                      CanContentScroll="{TemplateBinding CanContentScroll}" />

                            <ScrollBar x:Name="PART_VerticalScrollBar"
                         Grid.Column="2"
                         Grid.Row="1"
                         Orientation="Vertical"
                         ViewportSize="{TemplateBinding ViewportHeight}"
                         Maximum="{TemplateBinding ScrollableHeight}"
                         Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                         Value="{Binding VerticalOffset, Mode=OneWay, 
                  RelativeSource={RelativeSource TemplatedParent}}"/>

                            <Grid Grid.Column="1"
                    Grid.Row="2">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, 
                      RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>

                                <ScrollBar x:Name="PART_HorizontalScrollBar"
                           Grid.Column="1"
                           Orientation="Horizontal"
                           ViewportSize="{TemplateBinding ViewportWidth}"
                           Maximum="{TemplateBinding ScrollableWidth}"
                           Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                           Value="{Binding HorizontalOffset, Mode=OneWay, 
                    RelativeSource={RelativeSource TemplatedParent}}"/>
                            </Grid>
                        </Grid>
                    </ControlTemplate>
                </ScrollViewer.Template>
                <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            </ScrollViewer>
        </Border>
    </ControlTemplate>
</Window.Resources>

Линия, которую мы добавили к этому:

Loaded="theScaryButton_Loaded"  

Между тем в коде позади нашего окна...

//set up datagrid...
this.reportDataGrid.Template = this.Resources["dgControlTemplate"] as ControlTemplate;

а также

private void theScaryButton_Loaded(object sender, RoutedEventArgs e)
{
    //this is a baddy way to do this.  better to recurse through visual tree
    //or try your luck at FindName/GetTemplateChild nonsense

    VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(sender as FrameworkElement, 0), 1).SetValue(FrameworkElement.VisibilityProperty, Visibility.Collapsed);
}

В "Страшной кнопке" есть грязный маленький полигон. Для примера я добавил несколько кода, чтобы схватить его и закрыть. Лучший способ сделать это - отредактировать визуальное дерево или, возможно, получить от Button и испытать удачу с GetTemplateChild. Однако этого должно быть достаточно, чтобы вы начали. Простите меня, если это значительно сложнее, я пришел из Silverlight World, где все очень сложно.

Вы также можете попытаться просто проделать свой путь через визуальное дерево, чтобы найти Nasty Little Polygon, но будьте готовы вырыть не один, не два, а три шаблона управления на вашем пути вниз.

  • 0
    Спасибо за подробный ответ. Я попробую и сообщу, смогу ли я заставить это работать.
0

Используйте свойство RowHeaderWidth:

<my:DataGrid RowHeaderWidth="0" AutoGenerateColumns="False" Name="dataGrid1" />

Обратите внимание, что вы также можете указать стиль или шаблон для него, если вы решите, что вам действительно нравится, и хотите сохранить его, потому что вы можете сделать что-то круто с ним.

  • 0
    Проверьте мой код. Я использовал это свойство, но никакого эффекта.
  • 0
    Хорошо, попробуйте этот reportDataGrid.RowHeadersVisible = false;
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню