[英]Changing WPF StackPanel template
我正在嘗試創建一個自定義樣式面板( StyledStackPanel
),它與常規StackPanel相同,具有自定義樣式。 例如 - 如果樣式只是添加下划線,則寫入:
<StyledStackPanel>
<!--User content goes here-->
</StyledStackPanel>
我希望收到與我寫的相同的外觀:
<StackPanel>
<!--User content goes here-->
</StackPanel>
<Border Height="1" BorderBrush="Blue"/>
如果StackPanel
是一個Control
,我可以替換該控件的DataTemplate
。 但是,它繼承了繼承FrameworkElement
Panel
。
有沒有辦法更改StackPanel
的模板?
無法為面板設置ControlTemplate,但您有幾個選項:
創建一個將StackPanel作為子項的自定義/用戶控件。
從StackPanel繼承並覆蓋OnRender以繪制自定義樣式(您可能還需要覆蓋MeasureOverride和ArrangeOverride以在面板的子項周圍為繪圖添加一些空間。
直接從Panel繼承並覆蓋OnRender,MeasureCore和ArrangeCore - 如果您需要使用面板是一種特定的方式,並且您不需要所有StackPanel的選項,這可能是最簡單的方法,因為StackPanel布局算法很簡單。
從Decorator繼承(如果您在代碼中繪圖)或ContentControl(如果您想使用ControlTemplate)並在使用它時使用它來扭曲面板:
<l:PanelStyle> <StackPanel> .. <StackPanel> </l:PanelStyle>
為ItemsControl編寫樣式,ItemsControl有一個ControlTemplate,你可以設置它並基本上包裝一個面板(默認情況下它是一個垂直的StackPanel)。
如果您需要訪問StackPanel的屬性,我會使用選項4,如果不需要,我會選擇5。
您應該創建一個普通的自定義控件,將其子元素添加到內部StackPanel
。
例如:
[ContentProperty("Children")]
public class StyledStackPanel : UserControl {
public UIElementCollection Children { get { return stackPanel.Children; } }
}
(未測試)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.