簡體   English   中英

更改WPF StackPanel模板

[英]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,但您有幾個選項:

  1. 創建一個將StackPanel作為子項的自定義/用戶控件。

  2. 從StackPanel繼承並覆蓋OnRender以繪制自定義樣式(您可能還需要覆蓋MeasureOverride和ArrangeOverride以在面板的子項周圍為繪圖添加一些空間。

  3. 直接從Panel繼承並覆蓋OnRender,MeasureCore和ArrangeCore - 如果您需要使用面板是一種特定的方式,並且您不需要所有StackPanel的選項,這可能是最簡單的方法,因為StackPanel布局算法很簡單。

  4. 從Decorator繼承(如果您在代碼中繪圖)或ContentControl(如果您想使用ControlTemplate)並在使用它時使用它來扭曲面板:

      <l:PanelStyle> <StackPanel> .. <StackPanel> </l:PanelStyle> 
  5. 為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM