2014-10-29 111 views
0

我有一個按鈕,使用下面的ControlTemplate。如何使按鈕形狀在WPF中的自定義路徑?

<ControlTemplate x:Key="ControlTemplate" TargetType="{x:Type Button}"> 
     <Grid> 
      <Path x:Name="ButtonPath" Fill="{Binding IsSelected, Converter={StaticResource ArrowBackgroundColorConverter}, UpdateSourceTrigger=PropertyChanged}" 
        Data="{Binding Converter={StaticResource ArrowPathSelector}}" Stretch="UniformToFill" Margin="0 0 -35 0"></Path> 
      <TextBlock Grid.Column="0" Grid.Row="0" FontFamily="{StaticResource ApplicationFont}" FontSize="{StaticResource Heading3}" HorizontalAlignment="Center" Margin="35 0 0 0" VerticalAlignment="Center" Text="{Binding Title}" Foreground="White"/> 
     </Grid> 
    </ControlTemplate> 

但是當我按一下按鈕在我的應用程序是不是勾勒路徑,而是原始的按鈕。

我不能完全弄清楚如何讓按鈕反映路徑本身。任何幫助非常感謝,謝謝!

+0

你正在設置按鈕的'Template =「{StaticResource ControlTemplate}」'? – 2014-10-29 15:03:12

+0

是的,我是。問題是當我將鼠標懸停在按鈕上或單擊它時,輪廓位於矩形按鈕上,我希望它是我正在使用的箭頭,即箭頭。 – 2014-10-29 15:12:29

+0

這沒有任何意義。如果您覆蓋按鈕的「模板」,則沒有任何內容可以給它一個矩形輪廓 - 來自您要替換的原始模板。你在*另一個*按鈕中嵌入了這個嗎?您可以驗證模板是否正在應用,例如,路徑是否顯示出來? – 2014-10-29 15:14:23

回答

0

您是否嘗試過把你的路徑和你的文本塊周圍的其他方法:

<ControlTemplate x:Key="ControlTemplate" TargetType="{x:Type Button}"> 
    <Grid> 
     <TextBlock Grid.Column="0" Grid.Row="0" FontFamily="{StaticResource ApplicationFont}" FontSize="{StaticResource Heading3}" HorizontalAlignment="Center" Margin="35 0 0 0" VerticalAlignment="Center" Text="{Binding Title}" Foreground="White"/> 
     <Path x:Name="ButtonPath" Fill="{Binding IsSelected, Converter={StaticResource ArrowBackgroundColorConverter}, UpdateSourceTrigger=PropertyChanged}" 
       Data="{Binding Converter={StaticResource ArrowPathSelector}}" Stretch="UniformToFill" Margin="0 0 -35 0"></Path> 
    </Grid> 
</ControlTemplate> 
1

如果要更改焦點矩形的形狀(虛線邊框指示鍵盤焦點),你需要創建一個定製FocusVisualStyle,在相同的形狀繪製虛線路徑爲您的按鈕內容:

<Style x:Key="ButtonFocusRectangle" TargetType="Control"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate> 
     <Path Stroke="Black" 
       StrokeDashArray="2 2" 
       Data="M 0,0 50,50 100,0 Z" 
       Stretch="UniformToFill" 
       Margin="0 0 -35 0" /> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

然後,在按鈕,設置FocusVisualStyle="{StaticResource ButtonFocusRectangle}"。請注意,爲按鈕定義自定義Style可能會更清晰,並且它可以爲您應用TemplateFocusVisualStyle

或者,您可以完全通過設置FocusVisualStyle="{x:Null}"擺脫焦點視覺。您可以選擇執行此操作,只需在常規的Template中繪製焦點提示,例如通過觸發器更改路徑的筆畫。

另外,您可能想要在兩個模板的路徑上設置StretchUniformUniformToFill可能導致裁剪。