Настраиваемая сетка данных управления WPF — создание столбца

#c# #wpf #visual-studio #xaml #datagrid

#c# #wpf #visual-studio #xaml #сетка данных

Вопрос:

Я новичок в WPF, и я хочу создать пользовательский элемент управления datagrid с несколькими элементами управления внутри этого элемента управления.

моя настраиваемая сетка данных xaml:

 <ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Bank"
   xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit">

    <Style TargetType="{x:Type local:EDataGrid}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:EDataGrid}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="500*" />
                                <RowDefinition Height="100*" />
                            </Grid.RowDefinitions>
                            <local:FilteringDataGrid x:Name="datagrid" Grid.Row="0"  ItemsSource="{TemplateBinding ItemsSource}"></local:FilteringDataGrid>
                            <Grid Grid.Row="1"  Height="26" Width="208">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="25*"/>
                                    <ColumnDefinition Width="25*"/>
                                    <ColumnDefinition Width="50*"/>
                                    <ColumnDefinition Width="20*"/>
                                    <ColumnDefinition Width="50*"/>
                                    <ColumnDefinition Width="25*"/>
                                    <ColumnDefinition Width="25*"/>
                                </Grid.ColumnDefinitions>
                                <Button x:Name="ButtonFirstPage" Grid.Column="0" Tag="First" Content="amp;<amp;<" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch"  BorderThickness="1,1,0,1" />
                                <Button x:Name="ButtonPreviousPage" Grid.Column="1" Tag="Previous" Content="amp;<" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
                                <Button x:Name="ButtonNextPage" Grid.Column="5" Tag="Next" Content="amp;>" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" />
                                <Button x:Name="ButtonLastPage" Grid.Column="6" Tag="Last" Content="amp;>amp;>" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" BorderThickness="0,1,1,1"/>
                                <TextBox x:Name="TbPage" HorizontalAlignment="Stretch" VerticalContentAlignment="Center" Grid.Column="2"  TextAlignment="Right"   TextWrapping="Wrap" Text="1" VerticalAlignment="Stretch"  BorderThickness="0,1" />
                                <TextBox x:Name="TbOfPage" VerticalContentAlignment="Center" Grid.Column="4" HorizontalAlignment="Stretch" TextWrapping="Wrap" VerticalAlignment="Stretch"  Text="1" BorderThickness="0,1" />
                                <TextBox x:Name="TbPage_Copy" VerticalContentAlignment="Center"  Grid.Column="3" TextAlignment="Center" HorizontalAlignment="Stretch"   TextWrapping="Wrap" Text="z" VerticalAlignment="Stretch"  BorderThickness="0,1"/>
                            </Grid>
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>


        </Setter>
    </Style>
</ResourceDictionary>
  

и я хочу использовать эту сетку данных следующим образом в основных окнах (т.е. Указать столбцы):

 <local:EDataGrid x:Name="dataGrid" " AutoGenerateColumns="False" >
   <wp:DataGrid.Columns>
       <wp:DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
       <wp:DataGridTextColumn Header="Type" Binding="{Binding Type}"/>
   </wp:DataGrid.Columns>
</local:EDataGrid>
  

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

Комментарии:

1. в вашем примере FilteringDataGrid не используется родительский AutoGenerateColumns параметр в шаблоне. также он должен каким-то образом использовать определенный родительский Columns

2. В вашем внутреннем DataGrid вам нужно заполнить Columns коллекцию из того, что вы заполняете прямо сейчас EDataGrid . Columns коллекция не является a DependencyProperty , поэтому Binding не будет работать.