2009-01-29 89 views
1

我不认为这很有可能,但它值得一试,看看你们说什么。我试图在C#中创建一个半椭圆按钮(不是XAML,可能通过另一个曲线球)。如果我想为按钮预先确定尺寸,我只会使用图片或类似的东西,但这不是尺寸变化后的情况。下面是更详细地:WPF:创建半椭圆按钮

  1. 我有X半径和Y半径(或宽度和高度,由2乘以尊敬)的椭圆形。

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

  3. 我不想要矩形按钮,扩展超出椭圆,并削减到父,我想要实际的椭圆形按钮,除了每个按钮只有一半的椭圆。

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

任何帮助或建议或指针将大大帮助。

回答

4

在我回答这个问题之前,我很想知道为什么您必须避免使用XAML,在WPF应用程序中?你几乎肯定会间接地使用XAML,所以为什么不使用它 - 让你的按钮应该是小菜一碟!这正是它的目的!

这就好比当你站在砖和灰泥旁边时,想要用胶带做房子! :)

+0

整个椭圆的大小发生变化。假设某人放置了一行代码,如myEllipse.xRadius = 40;每个按钮的宽度基本上都在按钮的中心大部分为40。如果类似的东西可以使用纯XAML,那么这将起作用。 – Nick 2009-01-29 16:14:05

+0

是的!这将工作。 XAML非常适合这种布局。你可以很容易地做到这一点,只需公开一个Radius属性,然后在该集合中,将radius * 2应用到基本控件宽度,并且如果正确设置了该控件,控件将自动调整大小! :) – 2009-01-29 16:17:49

0

你必须添加额外的触发器(如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