Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 相同的按钮,但外观不同WPF_C#_Wpf_Button_Styles - Fatal编程技术网

C# 相同的按钮,但外观不同WPF

C# 相同的按钮,但外观不同WPF,c#,wpf,button,styles,C#,Wpf,Button,Styles,我的Window.xaml上有几个按钮, 有趣的是,当我运行应用程序时,即使我对每个应用程序使用相同的代码,它们看起来也不一样 以下是截图: 可以注意到它们的边框在Y按钮上看起来不一样 下面是我为每个自定义按钮编写的代码:X、Y和Z <Button x:Name="btnX" Grid.Column="1" FontSize="15" BorderThickness="1" Content="X" Horizo

我的Window.xaml上有几个按钮, 有趣的是,当我运行应用程序时,即使我对每个应用程序使用相同的代码,它们看起来也不一样

以下是截图:

可以注意到它们的边框在Y按钮上看起来不一样

下面是我为每个自定义按钮编写的代码:X、Y和Z

<Button x:Name="btnX"
        Grid.Column="1"
        FontSize="15"
        BorderThickness="1"
        Content="X"
        HorizontalContentAlignment="Center"
        VerticalContentAlignment="Center"
        Foreground="Black"
        Background="#d3d3d3"
        BorderBrush="Black" Margin="5">
        <Button.Template>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border BorderThickness="{TemplateBinding BorderThickness}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                </Border>
            </ControlTemplate>
        </Button.Template>
    </Button>

    <Button x:Name="btnZ"
        Grid.Column="2"
        FontSize="15"
        Content="Z"
        BorderThickness="1"
        HorizontalContentAlignment="Center"
        VerticalContentAlignment="Center"
        Foreground="Black"
        Background="#d3d3d3"
        BorderBrush="Black" Margin="5">
        <Button.Template>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border BorderThickness="{TemplateBinding BorderThickness}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                </Border>
            </ControlTemplate>
        </Button.Template>

    </Button>


        <Button x:Name="btnY"
        Grid.Column="2"
        Grid.Row="1"
        FontSize="15"
        Content="Y"
        BorderThickness="1"
        HorizontalContentAlignment="Center"
        VerticalContentAlignment="Center"
        Foreground="Black"
        Background="#d3d3d3"
        BorderBrush="Black" Margin="5">
        <Button.Template>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border BorderThickness="{TemplateBinding BorderThickness}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                </Border>
            </ControlTemplate>
        </Button.Template>
</Button>
我发现在我的按钮上设置SnapsToDevicePixels=True和UseLayoutRounding=True解决了这个问题,我不确定这是否是最好的答案,但这确实帮助了我

设置此属性后的按钮:


边框现在看起来一样了,黑色也应该一样。

有什么不同吗?@NikhilAgrawal难道你没注意到它们的边框看起来不一样吗?我对每个按钮都使用了黑色边框刷,其中一些看起来像是我偶然使用的灰色?我不确定这是否是最好的答案,但这确实帮助了我。它是。WPF使用亚像素渲染,当控件定位在两个像素之间时会产生这种奇怪的效果,通常是因为您有一个使用百分比进行定位的容器。您发现的属性会稍微更改控件的位置,使其适合屏幕像素。我无法理解为什么它没有按默认值激活。@KevinGosse是的,我可以告诉你当BorderThickness为1时它是很好的,但如果你将它更改为1.5或smth,它就会再次开始变差,比如你给了上边框1.5和下边框1.5,其余的是1,真的很奇怪,所以我现在就把它保持在1像素的厚度上。