Полностью удалить линии сетки в WPF

У меня есть Сетка WPF с прямоугольниками в каждом столбце. Все столбцы имеют одинаковую ширину (1*), а все прямоугольники имеют черный фон. В режиме конструктора между прямоугольниками (линиями столбцов таблицы) есть тонкие линии, что хорошо, но моя проблема в том, что эти линии все еще видны во время выполнения:

пример

Мой код:

<Grid ShowGridLines="False">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
        <ColumnDefinition Width="1*"/>
    </Grid.ColumnDefinitions>
    <Rectangle Fill="Black" />
    <Rectangle Grid.Column="1" Fill="Black" />
    <Rectangle Grid.Column="2" Fill="Black" />
    <Rectangle Grid.Column="3" Fill="Black" />
    <Rectangle Grid.Column="4" Fill="Black" />
    <Rectangle Grid.Column="5" Fill="Black" />
</Grid>

Любая помощь будет оценена!

1 ответ

Решение

Эта проблема связана с тем, что у вас есть сетка с 6 столбцами, но ширина вашей сетки не кратна 6 пикселям. Это приводит к тому, что ширина каждого прямоугольника является дробным значением. Для пикселей на краю каждого прямоугольника механизм рендеринга WPF будет интерполировать между черным прямоугольником и фоном окна, давая серые полосы.

<Window x:Class="WpfApp2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWi ndow"
        SizeToContent="WidthAndHeight"
        UseLayoutRounding="False">
    <Grid ShowGridLines="False"
          Width="701"
          Height="300">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Rectangle Grid.Column="0"
                   Fill="Black" />
        <Rectangle Grid.Column="1"
                   Fill="Black" />
        <Rectangle Grid.Column="2"
                   Fill="Black" />
        <Rectangle Grid.Column="3"
                   Fill="Black" />
        <Rectangle Grid.Column="4"
                   Fill="Black" />
        <Rectangle Grid.Column="5"
                   Fill="Black" />
    </Grid>
</Window>

Вы можете увидеть это с помощью такого инструмента, как WPF Snoop

Исправление либо

  • Установите ширину сетки, кратную 6
  • Установите UseLayoutRounding в True

Последний вариант приведет к тому, что некоторые прямоугольники будут иметь разную ширину (на один пиксель), но все они будут иметь целое число пикселей.

Проще , если вы установите ResourceDictionary с этими значениями

<Style
     x:Key="callthiskey"
    TargetType="{x:Type DataGrid}">

    <Setter Property="IsReadOnly" Value="True"/>
    <Setter Property="AutoGenerateColumns" Value="False"/>
    <Setter Property="GridLinesVisibility" Value="None"/>

</Style>

После того, как вы установили словарь ресурсов, вы можете вызвать его из своего пользовательского элемента управления следующим образом

<DataGrid Style="{StaticResource callthiskey}">

это полностью удалит ваши строки

другой способ - просто установить настройки сетки вот так

GridLinesVisibility="none"
Другие вопросы по тегам