c# - WPF 路径 - 模糊的圆圈
问题描述
有没有办法在 WPF 中锐化一个圆圈中的像素?我尝试使用 SnapToDevicePixels 和 UseLayoutRounding,但我希望有更好的解决方案。
<Button HorizontalAlignment="Left" Height="30">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="UseLayoutRounding" Value="True"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="ToolTip" Value="Nazaj na začetno stran"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid Background="Transparent">
<Path Name="_path" Data="M9 -15.75A7.875000000000002 7.875000000000002 0 1 1 9 0A7.875000000000002 7.875000000000002 0 0 1 9 -15.75zM9 -16.875A9 9 0 1 1 9 1.125A9 9 0 0 1
9 -16.875z M13.5 -7.875A0.5625 0.5625 0 0 0 12.9375 -8.4375H6.420375L8.83575 -10.85175A0.5625 0.5625 0 0 0 8.03925 -11.64825L4.66425 -8.27325A0.5625
0.5625 0 0 0 4.66425 -7.47675L8.03925 -4.10175A0.5625 0.5625 0 1 0 8.83575 -4.89825L6.420375 -7.3125H12.9375A0.5625 0.5625 0 0 0 13.5 -7.875z"
Fill="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}" StrokeThickness="1" Stretch="Fill" Width="25" Height="25" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="_path" Property="Fill" Value="Black" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
解决方案
我不知道你期望用这么小的圆圈获得多清晰的图像。但是,使用小数像素位置或定义奇数尺寸的圆对您的情况没有帮助。
对于您想要的大小的图形,如下所示的内容与您将获得的一样平滑。
<Button HorizontalAlignment="Left" Height="30" Width="30" >
<Button.Style>
<Style TargetType="Button">
<Setter Property="Background" Value="Transparent" />
<Setter Property="UseLayoutRounding" Value="True"/>
<Setter Property="ToolTip" Value="Nazaj na začetno stran"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Ellipse x:Name="border" Stroke="Black" StrokeThickness="2" Width="24" Height="24" VerticalAlignment="Center" HorizontalAlignment="Center" />
<Path Width="12" Height="12" HorizontalAlignment="Center" VerticalAlignment="Center" Stroke="Black" StrokeThickness="2" Data="M 1,2 L 0,1 L 1,0 M 0,1 L 2,1" Stretch="Fill" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="border" Property="Fill" Value="DarkOrange" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
生成以下内容(放大 10 倍)
相比之下,这是一个 24 像素宽,2 像素笔宽,用paint.net 绘制的圆圈(再次放大 10 倍)
推荐阅读
- android - Flutter:为什么我收到错误“Route builder must never return null”?
- javascript - 摩纳哥编辑器错误:“jquery”的脚本错误,需要:vs/editor/editor.main
- android - 在测试中修改网络状态
- r - 从 ggplot2 中的单个数据框创建构面
- javascript - 从 PHP 获取数据到 HTML 并为其分配 id
- ssl - Tibco 客户端忽略过期证书
- tensorflow - tensorflow低级api,批量归一化问题
- python - Python:用一个空格替换双空格并删除单个空格
- java - 如何在后台发生转换(ENTER&EXIT)cordova geofence插件时在后台调用PHP文件?
- ios - 无法在 PhoneGap 上安装“cordova-plugin-firebase-analytics”pod 错误