2015-04-02 167 views
0

我有一個圓形的按鈕,我喜歡給它添加一對天使之翼,但我似乎無法正確繪製它。 我想繪製一個邊界,左邊是一個天使翼,右邊是一個天使翼,右邊是一個自定義形狀。WPF自定義形狀的按鈕

自定義形狀是按鈕的邊框。

該按鈕是一個可調整大小的按鈕,這意味着它可以改變高度&寬度與窗口,並仍然保持相同的位置。

這個按鈕僅僅是我迄今爲止所做的一個例子。

Circle Button

我搜索在谷歌的解決方案和這個網站,但無法找到任何可以幫助我..

+0

你可以在[Inkscape](https://inkscape.org/en/)中畫出你想要的,並保存爲XAML並直接在你的模板中使用它。檢查還[XDraw](https://xdraw.codeplex.com/) – Franck 2015-04-02 11:41:45

+0

如果我使用Adobe Photoshop CS6創建一個PNG,我可以在Inkscape中使用? Inkscape中的 – ArchAngel 2015-04-02 11:53:59

+0

可以打開大量圖像格式並將它們轉換爲'Path'對象。但質量取決於圖像源的質量和精度。如果你的圖像有顏色和巨大的線條粗細,並且使用了抗鋸齒技術,你將在路徑結果上獲得可怕的巨大量向量。如果你使用小線條和非常小的顏色,沒有漸變,你可以得到驚人的轉換結果。您也可以在圖像上手動追蹤並使用手動追蹤代替自動追蹤(通常效果最好) – Franck 2015-04-02 12:23:52

回答

1

您可以使用像Inkscape這樣的軟件,並且可以打開大多數圖像格式,並且可以使用跟蹤位圖選項來打開大多數圖像格式以跟蹤路徑。這將在<canvas>中創建一個<path>對象。它可以用作背景。

注意事項:

質量在很大程度上取決於圖像源的質量和精度。所以如果你的圖像有很多顏色和漸變,巨大的線條粗細和使用反鋸齒,你會得到非常糟糕的結果,因爲路徑結果中有大量的矢量。如果您使用更細的線條和非常小的顏色而沒有漸變,您可以獲得驚人的轉換結果。

您也可以在圖像上跟蹤並使用該圖像而不是自動選項。你會得到更好的結果,但它需要更多的工作。

創建此路徑後,您可以在應用程序字典中創建資源,並將它用於任何需要的圖標或背景。它可以在任何方向上擴展而不會丟失質量,因爲它現在是一個矢量「圖像」。

1

嘗試尋找圖像/軟件/其他任何圖像或繪圖方法爲XAML轉換器 你可以創建一個圖像,並將其轉換爲XAML
http://vectormagic.com

taken form here

+0

請問我是否可以更改WPF邊框控件上的邊框路徑? – ArchAngel 2015-04-02 11:50:40

+0

當你有它可以被用來作爲形狀的路徑 – ZSH 2015-04-02 12:01:34

+0

我有Xaml文件,但我如何應用邊界到邊界控制? – ArchAngel 2015-04-02 13:42:44

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. 在您的視圖模型,你會知道什麼時候該依賴項屬性修改按鈕被按下或釋放,並調用你所需要的命令。

我有一個像圓形按鈕,你可以旋轉和按等等。但是你可以使用任何你喜歡Blend的形狀。

+0

我已經創建了一個按鈕,我只需要告訴Border Control哪個形狀。 – ArchAngel 2015-04-02 12:26:43