使用路径作为附加属性的WPF自定义形状的按钮模板

提姆

我对WPF还是很陌生。我正在尝试创建一个将路径数据用于按钮形状的按钮模板。我的应用程序有几个按钮,它们将执行相似的任务,但是需要不同的形状。我正在尝试创建一个附加属性,该属性会将路径数据传递到我的模板。到目前为止,我得到的是:

附加属性:

Public Class CustomShapeButton
    Inherits Button
Public Shared PathDataProperty As DependencyProperty = DependencyProperty.RegisterAttached("PathData", GetType(Path), GetType(CustomShapeButton), New PropertyMetadata(Nothing))

Public Shared Sub SetPathData(obj As DependencyObject, value As Path)
    obj.SetValue(PathDataProperty, value)
End Sub
Public Shared Function GetPathData(obj As DependencyObject) As Path
    Return DirectCast(obj.GetValue(PathDataProperty), Path)
End Function
End Class

还有位于我的资源字典中的按钮模板:

    <Style x:Key="TransparentNavButton" TargetType="{x:Type Button}">
    <Setter Property="FontSize" Value="16"/>
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
                    <Path x:Name="pth" Data="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(hmi:CustomShapeButton.PathData)}" Stroke="Black" Stretch="Fill"/>
                    <ContentPresenter x:Name="ButtonContentPresenter" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,4,0"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="pth" Property="Fill" Value="#60FF0000"/>
                        <Setter TargetName="pth" Property="Stroke" Value="Blue"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后尝试实现如下所示的内容:

<Button Content="Button" Width="60" Height="50" Style="{StaticResource TransparentNavButton}">
    <hmi:CustomShapeButton.PathData>
        <Path Data="M1 1 L20 0 L20 20 L0 20 Z"/>
    </hmi:CustomShapeButton.PathData>
</Button>

我似乎无法让路径数据显示在按钮上。我想念什么?

阿迪·莱斯特(Adi Lester)

您的问题是您正在创建类型的附加属性,Path但将其分配给PathData模板中类型为的属性Geometry要解决此问题,请按如下所示更改附加的属性声明:

Public Class CustomShapeButton
Public Shared PathDataProperty As DependencyProperty = DependencyProperty.RegisterAttached("PathData", GetType(Geometry), GetType(CustomShapeButton), New PropertyMetadata(Nothing))

Public Shared Sub SetPathData(obj As DependencyObject, value As Geometry)
    obj.SetValue(PathDataProperty, value)
End Sub
Public Shared Function GetPathData(obj As DependencyObject) As Geometry
    Return DirectCast(obj.GetValue(PathDataProperty), Geometry)
End Function
End Class

然后像这样使用它:

<Button Content="Button" Width="60" Height="50"
        hmi:CustomShapeButton.PathData="M1 1 L20 0 L20 20 L0 20 Z"
        Style="{StaticResource TransparentNavButton}" />

还有一点要注意:您的CustomShapeButton类不需要继承Button-实际上,它根本不需要继承任何东西。但是,如果您想创建自己的具有PathData属性的派生按钮类,则可以从继承Button,在这种情况下,您可以将其声明PathData为常规依赖项属性,而不是附加属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用路径作为附加属性的WPF自定义形状的按钮模板

来自分类Dev

自定义附加属性的模板绑定

来自分类Dev

使用模板WPF自定义ListBoxItems

来自分类Dev

如何使用剪切路径CSS属性获得任何自定义形状?

来自分类Dev

自定义形状按钮

来自分类Dev

WPF-将自定义属性附加到滑块

来自分类Dev

使用路径在Android的画布上绘制自定义形状

来自分类Dev

WPF自定义控件,模型作为依赖项属性

来自分类Dev

WPF自定义按钮

来自分类Dev

如何自定义形状的开关按钮?

来自分类Dev

如何自定义形状的开关按钮?

来自分类Dev

JavaFX - 自定义按钮形状

来自分类Dev

使用自定义div作为按钮的缺点?

来自分类Dev

使用自定义属性值在模板中设置颜色

来自分类Dev

使用自定义属性值在模板中设置颜色

来自分类Dev

QML中的自定义附加属性

来自分类Dev

WPF DecimalUpDown自定义模板NullReferenceException

来自分类Dev

WPF自定义TabControl模板

来自分类Dev

使用Javascript从按钮获取自定义属性

来自分类Dev

使用Selenium通过自定义按钮属性查找元素

来自分类Dev

WPF - 将自定义 DataGridTextColumn 模板的 Content 属性绑定到父级的属性

来自分类Dev

从后面的代码获取并设置WPF自定义附加属性

来自分类Dev

WPF自定义透明按钮

来自分类Dev

Woocommerce 将自定义属性(分类法)作为数组添加到邮件模板

来自分类Dev

使用CSS创建自定义形状

来自分类Dev

使用CSS制作自定义形状

来自分类Dev

使用CSS制作自定义形状

来自分类Dev

使用BezierSegment创建自定义形状

来自分类Dev

使用CSS自定义图像形状