我有许多UserControl类:
它们都继承自一个普通的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>
是否有人遇到此问题并找到解决方案?
答案 0 :(得分:2)
使用适用于基类的样式:
<Style TargetType="BaseClass">
<Setter Property="Control.Template">
<Control.Value>
<StackPanel Margin="{Binding Margin}">
<!-- Rest of code here -->
</Control.Value>
</Style>
另外,我质疑每个其中一个基本类型的UserControls的问题 - 为什么不能在任何地方重用相同的UserControl?
答案 1 :(得分:0)
XAML类不能从XAML类继承,但普通类可以从XAML类继承 - 所以如果所有这些的XAML都相同,那么将XAML放在BaseDataType中并将所有派生类型放入正常状态非WPF c#类。
如果您需要从BaseDataType派生其他XAML用户控件,那么这是不可能的,但您可以使用样式,数据模板或控件模板在不同控件之间共享XAML。