我已经创建了一个名为“域”的定制控件样式只是内容的一部分,从ContentControl
继承和包含Grid
和label
揭露字段标签和ContentPresenter
允许把控制依赖关于我们想要编辑的数据。WPF子控件,
然后,我创建了一个名为“TextField”的自定义控件,该控件继承自Field
,该控件应将TextBox
放入内容中。
这里是样式Generic.xaml:
<Style TargetType="{x:Type controls:Field}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:Field}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid x:Name="grd" Margin="3px">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Path=LabelLength, RelativeSource={RelativeSource AncestorType=Control}}" />
<ColumnDefinition Width="{Binding Path=ContentLength, RelativeSource={RelativeSource AncestorType=Control}}" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="{Binding Path=Label, RelativeSource={RelativeSource AncestorType=Control}}" />
<ContentPresenter Grid.Column="1" Content="{TemplateBinding Content}" Margin="{TemplateBinding Padding}" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type controls:FieldText}" BasedOn="{StaticResource {x:Type controls:Field}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:FieldText}">
<TextBox Grid.Column="1" MaxLines="1" TextWrapping="NoWrap" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
证据,使用TextField
当这种只显示一个文本框。但是,我怎样才能通过保持控件的其余部分继承父类型来设置内容的样式(例如本例中的TextBox)?
我知道我可以重写每个派生控件的整个控件,但是这违背了继承原则,不是?将意味着重复的代码(在这里重复标记),如果我改变任何在父“场”,我将不得不改变它在每个孩子控制,有错误的风险...
你是在说自己关于把文本框为内容,但随后你将它放入模板覆盖一切。 – Evk