Как я могу имитировать эту сетку данных в WPF? - PullRequest
0 голосов
/ 14 августа 2011

На этой странице они показывают эту сетку данных:

http://demos.telerik.com/aspnet-ajax/grid/examples/dataediting/alleditablecolumns/defaultcs.aspx

Я бы хотел добавить реестры примерно так:

enter image description here

Сложно ли показывать этот UserControl, когда кто-то хочет добавить новый реестр? Как я могу начать?

1 Ответ

2 голосов
/ 16 августа 2011

Вам нужно будет стилизовать элемент управления DataGrid, так как быстрый Google не предлагает метод, позволяющий просто стилизовать "заполнитель нового элемента"

Для получения справки по этому вопросу вы должны проверить этот учебник (всего четыре статьи, и все они очень информативны)

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

В этот класс я добавил два новых свойства NewItemTemplate и IsAddingNewItem - IsAddingNewItem имеет значение true, если вы выбрали, что хотите добавить новый элемент, и NewItemTemplate отображается только тогда, когда это свойство имеет значение true.

Ниже приведена очень простая схема стиля для этого: ( примечание : для экономии места это только схема; этот код фактически не компилируется)

        <Style TargetType="{x:Type controls:DataGrid}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type controls:DataGrid}">
                        <Border>
                            <ScrollViewer Name="DG_ScrollViewer">
                                <ScrollViewer.Template>
                                    <ControlTemplate TargetType="{x:Type ScrollViewer}">
                                        <Grid>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="*"/>
                                                <RowDefinition Height="Auto"/>
                                                <RowDefinition Height="Auto"/>
                                            </Grid.RowDefinitions>

                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="Auto"/>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="Auto"/>
                                            </Grid.ColumnDefinitions>

                                            <!--Left Column Header Corner -->
                                            <Button Command="{x:Static controls:DataGrid.SelectAllCommand}" />

                                            <!--Column Headers-->
                                            <Primitives:DataGridColumnHeadersPresenter Grid.Column="1" Name="PART_ColumnHeadersPresenter" />

                                            <!--New Item Placeholder-->
                                            <ContentPresenter Grid.Column="1" Grid.Row="1" Content="{Binding Path=NewItemInstance, RelativeSource={RelativeSource AncestorType={x:Type controls:DataGrid}}}" ContentTemplate="{Binding Path=NewItemTemplate, RelativeSource={RelativeSource AncestorType={x:Type controls:DataGrid}}}" Visibility="{Binding Path=IsAddingItem, Converter={StaticResource booleanToVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type controls:DataGrid}}}" />

                                            <!--DataGrid content-->
                                            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" Grid.Row="2" Grid.ColumnSpan="2" CanContentScroll="{TemplateBinding CanContentScroll}" />

                                            <ScrollBar Grid.Row="0" Grid.RowSpan="4" Grid.Column="2" Name="PART_VerticalScrollBar" Orientation="Vertical" />

                                            <ToggleButton IsChecked="{Binding Path=IsAddingItem, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type controls:DataGrid}}}" Content="Add Item" Grid.Row="3" />

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

                                                <ScrollBar Grid.Column="1" Name="PART_HorizontalScrollBar" />
                                            </Grid>
                                        </Grid>
                                    </ControlTemplate>
                                </ScrollViewer.Template>

                                <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                            </ScrollViewer>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

Две части в этом примере, на которых вы должны сосредоточиться, это ContentPresenter под комментарием "<!--New Item Placeholder-->" и кнопка Toggle на несколько строк ниже.

Это стилизует DataGrid так, чтобы оно отображалось в 4 строках: «Заголовки столбцов», «Заполнитель нового элемента», «Строки DataGrid» и «Кнопка добавления нового элемента» - все они окружены полосами прокрутки.

Затем, при использовании этого элемента управления (вам нужно будет использовать пользовательский элемент управления, такой как <controls:DataGrid ... /> и установить свойство NewItemTemplate, как в вашем примере (вы также сможете использовать этот шаблон в шаблоне RowDetails для редактирование отдельных элементов для обеспечения единого внешнего вида).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...