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

我有许多UserControl类:

> DataTypeWholeNumber
> DataTypeLine
> DataTypeDate
> DateTypeDuration
>等

它们都继承自一个普通的C#类,该类继承自没有连接XAML的UserControl.我不得不这样做,因为我收到错误,说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>

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

最佳答案 使用适用于基类的Style:

<Style TargetType="BaseClass">
    <Setter Property="Control.Template">
        <Control.Value>          
            <StackPanel Margin="{Binding Margin}">
            <!-- Rest of code here -->
        </Control.Value>
</Style>

另外,我怀疑每个基本类型都需要UserControls – 为什么不能在任何地方重用相同的UserControl?

点赞