WPF从模板向DataGrid添加元素

时间:2018-03-15 16:12:44

标签: c# wpf

我试图弄清楚WPF中的模板是如何工作的。是否有可能改变这一点:

    <DataGrid x:Name="AppSettingsTextBoxes" Grid.Row="7" Style="{StaticResource AppSettingsDataGridStyle}" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}" Header="Element Name" Width="*" IsReadOnly="True"/>
            <DataGridTextColumn Binding="{Binding Value}" Header="Value" Width="*" />
            <DataGridTextColumn Binding="{Binding Comment}" Header="Comment" Width="4*" IsReadOnly="True" />
        </DataGrid.Columns>
    </DataGrid>

这样的事情:

 <Grid.Resources>
    <DataTemplate x:Key="TextBoxGridTemplate">
        <DataGrid>
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Name}" Header="Element Name" Width="*" IsReadOnly="True"/>
                <DataGridTextColumn Binding="{Binding Value}" Header="Value" Width="*" />
                <DataGridTextColumn Binding="{Binding Comment}" Header="Comment" Width="4*" IsReadOnly="True" />
            </DataGrid.Columns>
        </DataGrid>
    </DataTemplate>
 </Grid.Resources>
...
<DataGrid x:Name="AppSettingsTextBoxes" Grid.Row="7" Style="{StaticResource AppSettingsDataGridStyle}" (???)DataTemplate ="{StaticResource TextBoxGridTemplate}" />

1 个答案:

答案 0 :(得分:1)

  

是否有可能改变......

没有

DataGridDataTemplate的实例,而不是DataGrid。而且,您无法在DataTemplate中定义DataGrid列。

如果要在多个不同的位置重用相同的列,可以考虑创建一个以编程方式创建这些列的自定义public class CustomDataGrid : DataGrid { public CustomDataGrid() { Columns.Add(new DataGridTextColumn() { Binding = new Binding("Name"), Header = "Element Name" }); } } 类:

DataGrids

然后,您可以在XAML中创建此类的实例:

但您无法在XAML中定义列的实例,然后在多个select * from Table where Table.DateColumn BETWEEN DATEADD(d, -90, current_timestamp) AND current_timestamp 中重复使用此XAML。