我來自Windows窗體背景,我對控制顯示控件的最佳做法有些困惑。我正在研究一個我想要一些「眼睛糖果」的控件。在WinForms中,我會覆蓋Paint Event來執行任何可視化編程。我明白WPF的主要理由是將行動與展示分開。自定義控件模板,顯示和WPF
以下是我不確定的部分。假設我想在控件的「背景」中繪製一些簡單的線條。將這些行添加到模板中或者像在WinForms中那樣在代碼後面執行行繪製?
比如講我開發了一個名爲CustomControl1控制和想畫一條線,垂直居中,如控制的整個寬度:
它會更好做線代碼隱藏或在模板中?
我完全可以做到在XAML像這樣:
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid HorizontalAlignment="Left" Width="{Binding ActualWidth}">
<Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Aqua">
<Path Stretch="Fill" Stroke="Black" StrokeThickness="1" Data="M 0,0.5 H 1" />
</Border>
<TextBlock
HorizontalAlignment="Center"
Text="Some Text" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我不知道這是否是「最佳實踐」或者,如果有,我應該使用所有在一起的另一種方式?是否有一個理由使用另一個?是否有任何性能收益/損失?
WPF控件的可視化結構通常由其Template屬性定義,該屬性在(默認)Style中設置。見例如在[ControlTemplate](https://msdn.microsoft.com/en-us/library/system.windows.controls.controltemplate(v = vs.110).aspx)頁上的* Remarks *和* Examples *部分MSDN。 [樣式和模板](https://msdn.microsoft.com/en-us/library/ms745683(v = vs.110).aspx)頁上的* Control Templates *部分也可能有所幫助。 – Clemens