[英]Inherited templates in WPF
我試圖在WPF中制作一個常規的自定義控件,並從中派生其他控件。 該控件基本上是一個方形按鈕,具有用於圖標的路徑,並且在將其懸停時會更改顏色。 我的問題是,我既無法獲取基類也無法獲取后代類。 沒有錯誤,沒有渲染。
Generic.xaml包含此基類PlainButton
<Style TargetType="{x:Type local:PlainButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:PlainButton}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Border Background="{TemplateBinding BackgroundOverlay}" Padding="{TemplateBinding Padding}"/>
<Path HorizontalAlignment="Center" VerticalAlignment="Center" Stroke="{TemplateBinding Foreground}" StrokeThickness="2" Data="{TemplateBinding Icon}"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
而這對於繼承類CloseButton
<Style TargetType="{x:Type local:CloseButton}">
<Setter Property="Icon">
<Setter.Value>
<PathGeometry>
<PathFigure StartPoint="0,0">
<LineSegment Point="10,10" IsStroked="True"/>
<LineSegment Point="0,10" IsStroked="False"/>
<LineSegment Point="10,0" IsStroked="True"/>
</PathFigure>
</PathGeometry>
</Setter.Value>
</Setter>
</Style>
Icon和BackgroundOverlay是PlainButton類中的DP。 每個控件的一個控件放置在主xaml中,如下所示:
<local:PlainButton BackgroundOverlay="Beige" Padding="10,10,10,10" Icon="M 0 0 L 0 10 L 10 10 z" Foreground="Black" Height="100" Canvas.Left="391" Canvas.Top="59" Width="100" Background="Blue" BorderBrush="Black" BorderThickness="10"/>
和
<local:CloseButton Padding="16,16,16,16" DockPanel.Dock="Right" Foreground="Black" MouseUp="Close"/>
沒有人能告訴您問題出在哪里,因為您沒有顯示定義兩個自定義Button
的代碼。 但是,您實際上試圖創建自定義Button
的事實使我相信您是WPF的新手。 我之所以這樣說,是因為在WPF中幾乎不需要擴展UI控件,因為這種出色的語言為我們提供了許多其他方式來自定義內置控件而無需擴展它 。
因此,我建議您花一些時間來仔細閱讀MSDN上的“ 控件創作概述”頁面,而不要繼續按照當前的方式進行操作。 以下是鏈接頁面的介紹性摘錄:
從歷史上看,如果您想從現有控件中獲得自定義的體驗,則只能更改該控件的標准屬性,例如背景色,邊框寬度和字體大小。 如果希望將控件的外觀或行為擴展到這些預定義的參數之外,則通常需要通過繼承現有控件並覆蓋負責繪制控件的方法來創建新控件。 盡管這仍然是一個選項,但WPF允許您使用其豐富的內容模型,樣式,模板和觸發器來自定義現有控件。 下面的列表提供了有關如何使用這些功能來創建自定義和一致的體驗而無需創建新控件的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.