WPF网格白色条纹

时间:2018-06-14 11:12:05

标签: c# wpf wpfgrid

我有一个Grid里面有很多按钮。这些按钮应该是无缝连接的。在大多数情况下,这实际上是有效的,但有时在网格的列/行之间会出现白色条纹:

white stripes in image

我通过后面的代码将按钮添加到网格中(我很抱歉非最小代码,但我真的不知道这里可能有什么相关内容):< / p>

public partial class MainWindow
{
    private int _xCount;
    private int _yCount;

    public MainWindow ()
    {
        InitializeComponent ();

        SetSize (40, 40);
    }

    public void SetSize (int x, int y)
    {
        _xCount = x;
        _yCount = y;

        Grid.ColumnDefinitions.Clear ();
        Grid.RowDefinitions.Clear ();

        for (var i = 0; i < x; i++)
            Grid.ColumnDefinitions.Add (new ColumnDefinition {Width = new GridLength (100, GridUnitType.Star)});
        for (var i = 0; i < y; i++)
            Grid.RowDefinitions.Add (new RowDefinition {Height = new GridLength (100, GridUnitType.Star)});

        for (var xI = 0; xI < x; xI++)
            for (var yI = 0; yI < y; yI++)
            {
                var button = new Button
                {
                    BorderThickness = new Thickness (1),
                    BorderBrush     = Brushes.Gray,
                    Foreground      = Brushes.DarkGray,
                    Content         = "",
                    Background      = Brushes.DarkGray
                };

                Grid.Children.Add (button);
                Grid.SetColumn (button, xI);
                Grid.SetRow (button, yI);
            }

        SetButtonSizes ();
    }

    private void SetButtonSizes ()
    {
        var gridWidth  = Grid.Width;
        var gridHeight = Grid.Height;

        var buttonWidth  = gridWidth / _xCount;
        var buttonHeight = gridHeight / _yCount;

        foreach (var button in Grid.Children)
        {
            ((Button) button).Width  = buttonWidth;
            ((Button) button).Height = buttonHeight;
        }
    }

    protected override void OnRenderSizeChanged (SizeChangedInfo sizeInfo)
    {
        base.OnRenderSizeChanged (sizeInfo);
        SetButtonSizes ();
    }
}

WPF非常简单,看起来像这样:

<Window x:Class="Minesweeper.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow"
        Height="1000"
        Width="1000">
    <Grid Name="Grid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Window>

我已经尝试了Pixel Snapping,但没有任何区别。

1 个答案:

答案 0 :(得分:4)

您应该在网格上将 long nanoYesterday = System.nanoTime() - TimeUnit.DAYS.toNanos(1); 设置为true,而不是以编程方式调整按钮的大小。

但是,您可以使用UniformGrid

大大简化代码
UseLayoutRounding

并添加如下按钮:

<Window ...>
    <UniformGrid x:Name="grid"/>
</Window>