如何在wpf xaml中创建自适应自定义形状[已关闭]

envsm3lx  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(146)

已关闭。此问题需要更多focused。当前不接受答案。
**想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

5个月前关闭。
Improve this question
我需要自定义形状的按钮在我的wpf应用程序。形状需要像矩形,但与45度切对角像this。但这个应用程序将用于不同的屏幕和按钮宽度将取决于容器宽度的按钮在那里。当按钮的宽度不同的路径与xaml代码的角落Angular 变形像this。当按钮的大小被容器改变时,我如何修复它以仅改变直线的大小或保存按钮的纵横比。我的XAML代码:

<Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Path Fill="{TemplateBinding Background}"
                                      Stroke="{TemplateBinding Foreground}"
                                      Data="M 0 20 L 20 0 L 100 0 L 100 60 L 80 80 L 0 80 Z"
                                      Stretch="Fill">
                            </Path>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
31moq8wy

31moq8wy1#

您可以使用变换来代替几何:

<Button VerticalContentAlignment="Center"
        HorizontalContentAlignment="Center"
        BorderBrush="Blue"
        Content="HELLO WORLD">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="50"/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition Width="50"/>
                </Grid.ColumnDefinitions>

                <Border Background="Lime"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="3,3,0,0">
                    <Border.RenderTransform>
                        <SkewTransform AngleX="-45" CenterY="50"/>
                    </Border.RenderTransform>
                </Border>

                <Border Background="LightGreen" 
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="3,0,0,3" 
                        Grid.Row="1">
                    <ContentPresenter 
                        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>

                <Border Background="Green" 
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="0,0,3,3" 
                        Grid.Row="1" Grid.Column="1">
                    <Border.RenderTransform>
                        <SkewTransform AngleY="-45"/>
                    </Border.RenderTransform>
                </Border>
            </Grid>
        </ControlTemplate>
    </Button.Template>
</Button>

相关问题