我已經創建了一個名爲「域」的定製控件樣式只是內容的一部分,從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