模拟 XAML 代码继承的最佳方法是什么?

Edw*_*uay 5 wpf xaml

我有许多 UserControl 类:

  • 数据类型整数
  • 数据类型行
  • 数据类型日期
  • 日期类型持续时间
  • ETC。

它们都继承自一个普通的 C# 类,该类继承自 UserControl,而 UserControl 没有附加任何 XAML。我必须这样做,因为我收到错误消息说 XAML 无法继承

问题是每个 UserControl 的 XAML 基本相同,因此我想找到某种方法来至少模拟 XAML 继承,这样我就不必为 20 个不同的类重复此代码:

<dataTypes:BaseDataType x:Class="TestDependencyProperty827.DataTypes.DataTypeLine"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:dataTypes="clr-namespace:TestDependencyProperty827.DataTypes">
    <StackPanel Margin="{Binding Margin}">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="{Binding LabelWidth}"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <StackPanel Grid.Column="0" Orientation="Horizontal">
                <TextBlock Text="{Binding Label}" FontSize="14"/>
                <TextBlock FontSize="14" Text=":"/>
            </StackPanel>
            <TextBox Grid.Column="1" FontSize="12" HorizontalAlignment="Left" 
                      Text="{Binding Text}" 
                      Width="{Binding Width}"/>
        </Grid>
    </StackPanel>
</dataTypes:BaseDataType>
Run Code Online (Sandbox Code Playgroud)

有没有人遇到这个问题并找到解决方案?

Ana*_*tts 1

使用适用于基类的样式:

<Style TargetType="BaseClass">
    <Setter Property="Control.Template">
        <Control.Value>          
            <StackPanel Margin="{Binding Margin}">
            <!-- Rest of code here -->
        </Control.Value>
</Style>
Run Code Online (Sandbox Code Playgroud)

另外,我质疑每种基本类型都需要 UserControl - 为什么不能在任何地方重复使用相同的 UserControl?