какое название для предмета в зеленом круге - PullRequest
1 голос
/ 21 декабря 2010

как называется элемент в зеленом круге?Что это за событие, соответствующее нажатию на этот элемент?alt text

Ответы [ 5 ]

2 голосов
/ 21 декабря 2010

Интересно, что эта часть DataGrid - ничейная земля - ​​у нее даже нет официального названия, не говоря уже о поведении или шаблоне.Для обработки событий, связанных с этой областью, см. здесь или здесь .

1 голос
/ 21 декабря 2010

Если вы хотите отключить кнопку selectall, вы также можете сделать это следующим образом:

  //Disable select all button
  datagrid.CommandBindings.Add(new CommandBinding(DataGrid.SelectAllCommand, delegate { }, (s, a) => { if (a.OriginalSource is Button) ((Button)a.OriginalSource).IsEnabled = false; }));

в качестве обходного пути.Это также может быть использовано для подключения других вещей.

«Проблема» с повторными шаблонами заключается в том, что вы должны учитывать все темы ... утомительно:)

1 голос
/ 21 декабря 2010

Как уже говорили другие, это кнопка «Выбрать все». При нажатии на нее все будет выделено в DataGrid, если для SelectionMode установлено значение Extended.

Кнопка «Выбрать все» является частью шаблона DataGrid. Или, на самом деле, это часть шаблона ScrollViewer, который является частью шаблона DataGrid, поэтому он вложен довольно глубоко. Шаблон ControlTemplate выглядит следующим образом. Отсюда вы можете делать все что угодно с помощью кнопки SelectAll, отключать ее, менять фон и т. Д.

<Style TargetType="{x:Type DataGrid}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGrid}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
                    <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false">
                        <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>

                                    <!-- Here it is -->
                                    <Button Command="{x:Static DataGrid.SelectAllCommand}" Focusable="false" 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" CanContentScroll="{TemplateBinding CanContentScroll}" Grid.ColumnSpan="2" Grid.Row="1"/>
                                    <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="2" Maximum="{TemplateBinding ScrollableHeight}" Orientation="Vertical" Grid.Row="1" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
                                    <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" Maximum="{TemplateBinding ScrollableWidth}" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
                                    </Grid>
                                </Grid>
                            </ControlTemplate>
                        </ScrollViewer.Template>
                        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
1 голос
/ 21 декабря 2010

Я называю это кнопкой «выбрать все».Тем не менее, он не имеет официального названия.Он также не имеет каких-либо стилевых свойств.Простой способ стилизовать его с помощью прикрепленных свойств см. В следующем:

http://www.scottlogic.co.uk/blog/colin/2009/02/styling-hard-to-reach-elements-in-control-templates-with-attached-behaviours/

Колин Е.

0 голосов
/ 21 декабря 2010

По крайней мере, в одном примере, который я нашел, нажатие на серый треугольник в углу приводит к выделению всех строк.

Но это не встроенная функция этого элемента управления, насколько я знаю. Это часть пользовательского шаблона.

Смотрите этот пример: http://www.dotnetspark.com/kb/2941-styling-wpf-datagrid.aspx

Если вы скачаете образец и поищите в файле Resources / DataGridCustomization.xaml «SelectAll», вы найдете часть шаблона, содержащую эту функцию.

...