我如何在wpf/xaml中获得带触发器的按钮上的圆角



我想在有触发器的wpf中获得一个圆角的漂亮按钮,它可以在没有触发器的情况下获得我想要的按钮,但如果我使用触发器,那么我需要定义一个矩形,而不是那么圆。。这能做到吗?

我的代码:

<ControlTemplate TargetType="{x:Type Button}">
<Border  CornerRadius="15"
Background="White" 
BorderBrush="Black" 
BorderThickness="2">
<Grid>
<Rectangle x:Name="rectangle" 
StrokeThickness="2" 
Stroke="{TemplateBinding BorderBrush}" 
Fill="{TemplateBinding Background}" 
SnapsToDevicePixels="true"/>
<ContentPresenter 
x:Name="contentPresenter" 
ContentTemplate="{TemplateBinding ContentTemplate}" 
Content="{TemplateBinding Content}" 
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true">
<Setter Property="Stroke" TargetName="rectangle" 
Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Fill" TargetName="rectangle" Value="White"/>
<Setter Property="Stroke" TargetName="rectangle" Value="DimGray"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" 
Value="Gray"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Fill" TargetName="rectangle" Value="White"/>
<Setter Property="Fill" TargetName="rectangle" Value="LightGray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>

如果移除网格标记矩形和触发器,按钮看起来很棒,但当我按下它时没有效果——它必须是一个效果。这能做到吗?

谢谢你,小狗。

您可以使用BorderBackground属性来实现;效果";并从模板中删除Rectangle

<ControlTemplate TargetType="Button">
<Border x:Name="border" CornerRadius="15" Background="White" BorderBrush="Black" BorderThickness="2" >
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="White" />
<Setter Property="BorderBrush" TargetName="border" Value="DimGray" />
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="Gray" />
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="LightGray" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>

最新更新