[英]Custom Control Templates, Display and WPF
我來自Windows窗體背景,我對控制控件顯示的最佳實踐有點困惑。 我正在制作一個控制器,我想要一些“眼睛糖果”。 在WinForms中,我會覆蓋Paint事件來進行任何類型的可視化編程。 我知道WPF構思的主要原因是將Action與Display分開。
這是我不確定的部分。 假設我想在控件的“背景”中繪制一些簡單的線條。 將這些行添加到模板中或者在WinForms中執行代碼后面的行繪制是最佳實踐嗎?
例如,我說我正在開發一個名為CustomControl1的Control,並希望繪制一條直線居中的控件的整個寬度,如:
在Code Behind或模板中執行該行會更好嗎?
我可以完全在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>
我不確定這是“最佳實踐”還是我還有其他方法可以一起使用? 是否有一個理由使用一個而不是另一個? 是否有任何績效收益/虧損?
任何靜態都應該在xaml中。 例如,如果您知道此行總是從此位置開始,使用此大小,請將其放在xaml中。 但是如果線條是動態的,就像你可以有一條或多條線條,角度,曲線,不同的顏色等...你可能想要自己初始化它並在你的用戶控件中設置屬性。
IMO,你的代碼很好。 對於WPF中的這種要求,沒有人會像在WinForms中那樣“在代碼背后繪制線條”。
使用ControlTemplate和Style控制控件的顯示是WPF中的最佳和推薦方法。 此外,如果您需要代碼中的控件,則可以使用OnApplyTemplate覆蓋自定義控件中的GetTemplateChild方法獲取ControlTemplate中定義的控件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.