WPF自定义形状的按钮

时间:2015-04-02 11:25:41

标签: c# wpf

我有一个圆形按钮,我喜欢给它添加一对天使之翼,但我似乎无法正确绘制它。 我想在左边画一个天使翅膀的边框,在中间画一个圆圈,在右边画一个天使翅膀,一个自定义的形状。

自定义形状是按钮的边框。

按钮是一个可调整大小的按钮,这意味着它可以改变高度和高度。与窗口的宽度,仍然保持相同的位置。

这个按钮只是我到目前为止所做的一个例子。

Circle Button

我在谷歌和这个网站上搜索过一个解决方案,但找不到任何可以帮助我的东西..

3 个答案:

答案 0 :(得分:1)

尝试寻找图像/ Photoshop /任何其他图像或绘图方法到Xaml转换器 你可以创建一个图像并将其转换为xaml
http://vectormagic.com

taken form here

答案 1 :(得分:1)

您可以使用Inkscape等软件,并且可以打开大多数图像格式,您可以使用跟踪位图选项跟踪路径。这将在<path>中创建<canvas>个对象。然后它可以用作背景。

需要注意的事项:

质量高度依赖于图像源质量和精度。因此,如果您的图像具有大量的颜色和渐变,巨大的线条粗细并使用抗锯齿,则会因路径结果上的大量矢量而得到非常糟糕的结果。如果你使用更细的线条和非常少的颜色没有渐变,你可以得到惊人的转换结果。

您也可以手动追踪图像并使用它而不是自动选项。你会得到更好的结果,但需要更多的工作。

创建此路径后,您可以在应用程序字典中创建资源,并将其用于任何您想要的图标或背景。它可以在任何方向上进行扩展,而不会丢失质量,因为它现在是一个矢量&#34;图像&#34;。

答案 2 :(得分:0)

如果有帮助可以试试吗

  1. 创建自定义控件,类似这样

    <Grid ClipToBounds="True" HorizontalAlignment="Center" VerticalAlignment="Center">
    <ed:Arc x:Name="KnobA" ArcThickness="1" ArcThicknessUnit="Percent" EndAngle="360" Height="120" Stretch="None"
            Stroke="Black"
            StartAngle="0" Width="120" RenderTransformOrigin="0.5,0.5" StrokeThickness="0">
        <ed:Arc.Fill>
            <ImageBrush ImageSource="/Gazelle;component/Resources/Images/image.png" Stretch="UniformToFill" />
        </ed:Arc.Fill>
    </ed:Arc>
    </Grid>
    
  2. 在您的其他XAML

    中使用它
    <controls:BoundRotaryButton  Grid.Column="1" Margin="0,0,35,30"
    VerticalAlignment="Bottom" HorizontalAlignment="Right" Opacity="0.2"
    Grid.ColumnSpan="2"
    BoundRotaryButtonState="{Binding myvm.RotaryPressed, Mode=OneWayToSource, 
    NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}" />
    
  3. 在按钮控件和鼠标点击处理程序后面的代码中创建依赖项。

    public static readonly DependencyProperty KnobAPushButtonStateProperty = DependencyProperty.Register("KnobAPushButtonState", typeof (bool), typeof (KnobA));
    
    public bool KnobAPushButtonState
    {
    get { return (bool) GetValue(KnobAPushButtonStateProperty); }
    set { SetValue(KnobAPushButtonStateProperty, value); }
    }       
    
    
    private void KnobA_MouseDown(object sender, MouseEventArgs e)
    {
    Mouse.Capture(this);
    KnobAPushButtonState = true;
    
    private void KnobA_MouseUp(object sender, MouseEventArgs e)
    {
    Mouse.Capture(null);
    KnobAPushButtonState = false;
    }
    
  4. 在您的viewmodel中,您将知道此依赖项属性何时更改,按下或释放按钮并调用您需要的命令。

  5. 我有一个类似圆形按钮的东西,你可以旋转和按下等等。但是你可以在Blend中使用你喜欢的任何形状。