在WPF中创建带圆角的Datagrid Style / CustomControl

时间:2014-12-12 09:21:27

标签: wpf templates datagrid styles

我想通过添加带圆角的数据网格来增加我的WPF GUI。 我发现一篇文章很好地描述了当你将它直接应用到一个特定的数据网格时它是如何完成的。它的工作原理如下:

 <Border CornerRadius="10" Grid.Row="1"  Margin="10" BorderBrush="Gray" BorderThickness="1" >
                <Border.BitmapEffect>
                    <DropShadowBitmapEffect></DropShadowBitmapEffect>
                </Border.BitmapEffect>
                <Grid>
                    <Border x:Name="BDRounded" BorderThickness="1" BorderBrush="Gray" Background="White" CornerRadius="10"></Border>
                    <DataGrid x:Name="AKGrid"  Width="Auto" ItemsSource="{Binding List}"  AutoGenerateColumns="True" IsReadOnly="True" >
                        <DataGrid.OpacityMask>
                            <VisualBrush Visual="{Binding ElementName=BDRounded}"></VisualBrush>
                        </DataGrid.OpacityMask>
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="ID" Width="50" Binding="{Binding intID}"></DataGridTextColumn>
                            <DataGridTextColumn Header="Description" Width="250" Binding="{Binding txtDescription}"></DataGridTextColumn>
                        </DataGrid.Columns>
                    </DataGrid>
                </Grid>
            </Border>

我现在想将其封装到样式或自定义控件中。我的问题是: 在这种情况下,最好的方法是什么? CustomControl,UserControl,Style还是别的什么?那我该怎么做呢? 重要的是我有一个可重复使用的CustomDataGrid,它看起来像上面那个,我可以用任何旧的数据网格设置XAML中的所有Headers和Bindings。 帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

更改WPF控件的默认外观的正确方法是为相关控件提供新的ControlTemplate。为控件提供新ControlTemplate的最佳方法是从默认控件开始......对于DataGrid控件,您可以在{{3}中找到默认ControlTemplate MSDN上的页面。

如果您不确定如何使用非默认ControlTemplate,可以在MSDN上的DataGrid Styles and Templates页面上找到更多信息,但简而言之,您可以在某些内容中定义ControlTemplate Resources部分,然后将其设置为控件Template属性的值。您还可以在MSDN上的ControlTemplate Class页面中找到更多有用的信息。

在您的情况下,您周围的BorderDropShadowBitmapEffect ControlTemplate

最后,如果您希望新的ControlTemplate自动应用于应用中的每个DataGrid,请执行设置x:Key指令ControlTemplate中的Resources。否则,在x:Key上设置ControlTemplate指令,然后将该值设置为您要查看的DataGrid.Template的{​​{1}}属性。