【问题标题】:WPF: Create half elliptical buttonWPF:创建半椭圆按钮
【发布时间】:2009-01-29 15:42:54
【问题描述】:

我认为这不太可能,但值得一试,看看你们怎么说。我正在尝试在 C# 中创建一个半椭圆按钮(不是 XAML,可能通过另一个曲线球)。如果我想要按钮的预定大小,我会使用图像或类似的东西,但由于大小发生变化,情况并非如此。这里有更多细节:

  1. 我有一个带有 x 半径和 y 半径(或宽度和高度,分别乘以 2)的椭圆。

  2. 我想要两个按钮来填充整个椭圆,每个按钮占据椭圆的一半。

  3. 我不希望矩形按钮超出椭圆并被剪裁到父级,我想要实际的椭圆按钮,除了每个按钮只有一半椭圆。

  4. 如果这不能使用按钮完成,而是使用其他控件,那么我希望该控件能够像按钮一样工作。

任何帮助或建议或指示都会有很大帮助。

【问题讨论】:

    标签: c# wpf button ellipse


    【解决方案1】:

    在我回答这个问题之前,我很想知道为什么在 WPF 应用程序中必须避免使用 XAML?无论如何,您几乎肯定会间接使用 XAML,所以为什么不使用它 - 让您的按钮变得轻而易举!这正是它的用途!

    这就像当你站在砖头和砂浆旁边时试图用胶带盖房子一样! :)

    【讨论】:

    • 整个椭圆的大小发生变化。假设有人放了一行代码,例如 myEllipse.xRadius = 40;每个按钮的宽度基本上在按钮的最中心部分变为 40。如果这样的东西可以使用纯 XAML 工作,那么它会工作。
    • 是的!那会奏效。 XAML 非常适合这种布局。您可以很容易地做到这一点,只需公开一个 Radius 属性,然后在集合中,将 radius*2 应用于您的基本控件宽度,如果您设置正确,控件将自动调整大小! :)
    • 好的,那么我如何获得两个按钮来制作椭圆形状,而不一定是椭圆对象?然后随着所需的椭圆形状大小的变化,按钮也随之变化。
    • 把半椭圆画在一起真的是最难的。您甚至可以画一条线穿过它,然后找出鼠标位置单击了哪一个。如果我下班回家,我会给你举个例子,除非有人先进去!
    • 是的,我想只比较鼠标位置,看看点击了哪一半,但我不知道从哪里开始。我尝试创建一个椭圆对象并设置视觉画笔填充,但按钮是矩形且不可点击。
    【解决方案2】:

    使用 XAML,说真的 XAML 乍一看可能令人望而生畏,但它与您尝试纯粹在代码后面执行此操作而为自己创建的头痛完全不同。

    Custom WPF Button Style

    Step-by-Step Introduction to styling with Blend

    XAML Level 100

    【讨论】:

    • 好的,我将如何在 XAML 中执行此操作?
    【解决方案3】:

    您必须添加额外的触发器(例如 IsPressed),但这应该会给您一个很好的主意:

    <Button Height="30" Width="30">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Path Name="HalfEllipse" Stroke="Black" StrokeThickness="1" Fill="Blue">
                                <Path.Data>
                                    <PathGeometry>
                                        <PathFigure IsFilled="True" StartPoint="0,0">
                                            <PolyBezierSegment Points="5,30 25,30 30,0" />
                                        </PathFigure>
                                    </PathGeometry>
                                </Path.Data>
                            </Path>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter TargetName="HalfEllipse" Property="Fill">
                                        <Setter.Value>
                                            <SolidColorBrush Color="Green"/>
                                        </Setter.Value>
                                    </Setter>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Button.Style>
    </Button>
    

    查看此页面了解更多信息:http://www.codeproject.com/KB/WPF/glassbuttons.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      相关资源
      最近更新 更多