gpt4 book ai didi

wpf - 如何删除自定义按钮上的细边框线?

转载 作者:行者123 更新时间:2023-12-04 16:39:53 25 4
gpt4 key购买 nike

我制作了一个 BorderThickness=2 的自定义复选框按钮。我想在选中时将边框颜色更改为蓝色。

example button

问题是边框和图标之间有一条很细的黑线,这让我很烦。有什么方法可以删除它吗?

下面是我的按钮样式字典的部分代码。

<Style x:Key="ExampleButton" TargetType="{x:Type CheckBox}">
<Setter Property="Width" Value="40" />
<Setter Property="Height" Value="40" />
<Setter Property="Background" Value="{StaticResource BrushDarkGray11}" />
<Setter Property="BorderBrush" Value="{StaticResource BrushDarkGray11}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<Border x:Name="Grid" Background="{TemplateBinding Background}"
CornerRadius="2" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="2">
<ContentPresenter x:Name="Content" Content="{TemplateBinding Content}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Grid" Property="BorderBrush" Value="{StaticResource BrushBlue1}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

最佳答案

这似乎是 WPF 渲染带有抗锯齿边缘的边框的某种渲染工件。

通过添加 <Setter Property="SnapsToDevicePixels" Value="True" /> 告诉 WPF 呈现捕捉到屏幕像素的线,我能够(大部分)在我的测试代码中摆脱它风格(当我进行任何类型的桌面开发时,我总是将它设置在 Window 上,因为我认为它使 WPF 看起来更干净)。这看起来更好,但在每个角落都留下了不同颜色的小像素,很可能来自圆角。

接下来,我尝试嵌套边框,如下所示:

<ControlTemplate TargetType="{x:Type CheckBox}">
<Border
x:Name="Grid"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="2"
CornerRadius="2">
<Border Background="{TemplateBinding Background}">
<ContentPresenter
x:Name="Content"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Content="{TemplateBinding Content}" />
</Border>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Grid" Property="BorderBrush" Value="{StaticResource BrushBlue1}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>

这似乎已经为我完全修复了它。

enter image description here


我刚刚注意到这掩盖了内角半径。我有点喜欢这种效果,但如果你的项目有问题,你可以使用 Grid覆盖边框,以便圆形的绘制在顶部。确保四舍五入 Border有一个透明的Background .您还需要设置 Margin关于背景BorderBorderThickness 相同的值, 否则这个背景会从 Border 的外角渗出带圆角。

<ControlTemplate TargetType="{x:Type CheckBox}">
<Grid>
<Border Margin="2" Background="{TemplateBinding Background}">
<ContentPresenter
x:Name="Content"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Content="{TemplateBinding Content}" />
</Border>
<Border
x:Name="Grid"
Background="Transparent"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="2"
CornerRadius="2" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Grid"
Property="BorderBrush"
Value="{StaticResource BrushBlue1}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>

enter image description here

关于wpf - 如何删除自定义按钮上的细边框线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com