我正在尝试在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"/>
答案 0 :(得分:2)
没有人可以告诉您问题是什么,因为您没有显示定义任何自定义Button
的代码。但是,您尝试创建自定义Button
的事实让我相信您是WPF的新手。我这样说是因为在WPF中,几乎没有必要扩展UI控件,因为这种美妙的语言为我们提供了许多其他方法来自定义内置控件而无需扩展它。
因此,我建议您花点时间阅读MSDN上的Control Authoring Overview页面,而不是继续沿着当前路径前进。以下是链接页面的介绍性摘录:
过去,如果您希望从现有控件获得自定义体验,则只能更改控件的标准属性,例如背景颜色,边框宽度和字体大小。如果您希望将控件的外观或行为扩展到这些预定义参数之外,则需要创建一个新控件,通常是从现有控件继承并覆盖负责绘制控件的方法。虽然这仍然是一个选项,但WPF允许您使用其丰富的内容模型,样式,模板和触发器来自定义现有控件。以下列表提供了如何使用这些功能创建自定义和一致体验的示例,而无需创建新控件。