使用继承定义自定义 WPF 控件

我想我有一个简单的问题。基本上我有一个WPF应用程序,我经常使用DataGrid控件。每次我都以相同的方式设置样式(只是数据、行数和列数不同)。所以我想创建自己的控件DataGridMatrix来满足我的需求。


我为它写的代码如下:


<UserControl x:Class="StateMachines.UI.Controls.DataGridMatrix"

             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

             mc:Ignorable="d">

    <DataGrid Width="450"

              RenderTransformOrigin="0.657,1.249"

              ItemsSource="{Binding Path=Logic.DefaultView}" ColumnWidth="*"

              CanUserReorderColumns="False"

              CanUserResizeColumns="False" CanUserAddRows="False" CanUserSortColumns="False"

              CanUserResizeRows="False" Grid.ColumnSpan="1">

        <DataGrid.ColumnHeaderStyle>

            <Style TargetType="{x:Type DataGridColumnHeader}"

                   BasedOn="{StaticResource MetroDataGridColumnHeader}">

                <Setter Property="HorizontalContentAlignment" Value="Center" />

            </Style>

        </DataGrid.ColumnHeaderStyle>

        <DataGrid.RowHeaderStyle>

            <Style TargetType="{x:Type DataGridRowHeader}"

                   BasedOn="{StaticResource MetroDataGridRowHeader}">

                <Setter Property="HorizontalContentAlignment" Value="Center" />

            </Style>

        </DataGrid.RowHeaderStyle>


如您所见,我只对其进行样式设置,没有在其中放入任何数据(在 XAML 中)。问题是我当然可以把这个控件放在我MainWindow.xaml这样的地方:


<controls:DataGridMatrix x:Name="DataGridTransition"/>

但是,如果我想要 fe 改变位置(在网格中,fe 我希望它Grid.ColumnSpan="2"代替Grid.ColumnSpan="1") I can't do that, cuz theDataGrid is in my control, and my control isn't derived fromDataGrid` 本身(我想,如果它是派生的,那么我可以这样做,就像在普通类中一样,对吧? )。


所以最后我的问题是:有没有办法从XAML我自己的标准控件中继承UserControl并设置不同的样式(就像这里,在我的代码中我会省略<DataGrid>标签,我会将它的参数放在<UserControl>标签中+其他类似的东西DataGrid.ColumnHeaderStyle将被放置在<UserControl>) 的正下方?


长风秋雁
浏览 282回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP