Dot-Net

如何在 WPF 中創建/製作圓角按鈕?

  • July 19, 2011

我需要在 WPF中創建一個**圓角光澤按鈕。**誰能解釋一下需要哪些步驟?

您必須為按鈕創建自己的 ControlTemplate。看看樣品

創建了一個名為 RoundCorner 的樣式,在其中我進行了更改,而是為圓角和一些背景和其他觸發效果創建了自己的帶邊框 (CornerRadius=8) 的新控制項模板。如果您擁有或了解 Expression Blend,則可以非常輕鬆地完成。

<Style x:Key="RoundCorner" TargetType="{x:Type Button}">
   <Setter Property="HorizontalContentAlignment" Value="Center"/>
   <Setter Property="VerticalContentAlignment" Value="Center"/>
   <Setter Property="Padding" Value="1"/>
   <Setter Property="Template">
       <Setter.Value>
           <ControlTemplate TargetType="{x:Type Button}">
               <Grid x:Name="grid">
                   <Border x:Name="border" CornerRadius="8" BorderBrush="Black" BorderThickness="2">
                       <Border.Background>
                           <RadialGradientBrush GradientOrigin="0.496,1.052">
                               <RadialGradientBrush.RelativeTransform>
                                   <TransformGroup>
                                       <ScaleTransform CenterX="0.5" CenterY="0.5" 
                                                       ScaleX="1.5" ScaleY="1.5"/>
                                       <TranslateTransform X="0.02" Y="0.3"/>
                                   </TransformGroup>
                               </RadialGradientBrush.RelativeTransform>
                               <GradientStop Offset="1" Color="#00000000"/>
                               <GradientStop Offset="0.3" Color="#FFFFFFFF"/>
                           </RadialGradientBrush>
                       </Border.Background>
                       <ContentPresenter HorizontalAlignment="Center"
                                         VerticalAlignment="Center"
                                         TextElement.FontWeight="Bold">
                       </ContentPresenter>
                   </Border>

               </Grid>
               <ControlTemplate.Triggers>
                   <Trigger Property="IsPressed" Value="True">
                       <Setter Property="Background" TargetName="border">
                           <Setter.Value>
                               <RadialGradientBrush GradientOrigin="0.496,1.052">
                                   <RadialGradientBrush.RelativeTransform>
                                       <TransformGroup>
                                           <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="1.5" ScaleY="1.5"/>
                                           <TranslateTransform X="0.02" Y="0.3"/>
                                       </TransformGroup>
                                   </RadialGradientBrush.RelativeTransform>
                                   <GradientStop Color="#00000000" Offset="1"/>
                                   <GradientStop Color="#FF303030" Offset="0.3"/>
                               </RadialGradientBrush>
                           </Setter.Value>
                       </Setter>
                   </Trigger>
                   <Trigger Property="IsMouseOver" Value="True">
                       <Setter Property="BorderBrush" TargetName="border" Value="#FF33962B"/>
                   </Trigger>
                   <Trigger Property="IsEnabled" Value="False">
                       <Setter Property="Opacity" TargetName="grid" Value="0.25"/>
                   </Trigger>

               </ControlTemplate.Triggers>
           </ControlTemplate>
       </Setter.Value>
   </Setter>
</Style>

使用

<Button Style="{DynamicResource RoundCorner}" 
       Height="25" 
       VerticalAlignment="Top" 
       Content="Show" 
       Width="100" 
       Margin="5" />

我知道這篇文章已經很老了,但我有一個答案令人驚訝地從上面遺漏了,而且比大多數人都簡單得多。

<Button>
   <Button.Resources>
       <Style TargetType="Border">
           <Setter Property="CornerRadius" Value="5"/>
       </Style>
   </Button.Resources>
</Button>

由於 Button 控制項的預設 ControlTemplate 使用 Border 元素,因此將 Border 樣式添加到 Button 的資源會將該樣式應用於該 Border。這使您無需製作自己的 ControlTemplate 也無需任何程式碼即可添加圓角。它也適用於所有種類的 Button(例如 ToggleButton 和 RepeatButton)。

引用自:https://stackoverflow.com/questions/6745663