Как подавить границу выбора ячейки DataGrid? - PullRequest
4 голосов
/ 29 марта 2011

Я попытался установить стиль границы, как предложено здесь Отключить текущую границу ячейки DataGrid в режиме выделения FullRow , но это не помогает. Отключает выделение границы ячейки при выборе с помощью мыши, но при выделении с помощью клавиатуры все еще остается пунктирная граница ячейки. Есть предложения?

Ответы [ 2 ]

10 голосов
/ 29 марта 2011

пунктирной линией, которую вы видите, является ячейка FocusedVisualStyle

, которую необходимо переопределить, чтобы она была пустой.

2 варианта (один из них должен быть правильнымно поскольку у меня не было времени, чтобы попробовать, я не знаю, какой)

  • VisualStyle устанавливается непосредственно на ячейку

это означает, что вы должны установитьчерез свойство CellStyle:

<DataGrid.CellStyle>
   <Style TargetType="DataGridCell">
      <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
   </Style>
</DataGrid.CellStyle>

или если вы хотите следовать шаблонным рекомендациям MS:

<DataGrid.Resources>

    <!--CellFocusVisual-->
    <Style x:Key="CellFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border>
                        <Rectangle StrokeThickness="0" Stroke="#00000000" StrokeDashArray="1 2"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</DataGrid.Resources>

<DataGrid.CellStyle>
   <Style TargetType="DataGridCell">
      <Setter Property="FocusVisualStyle" Value="{StaticResource CellFocusVisual}"/>
   </Style>
</DataGrid.CellStyle>

(таким образом, вы можете увидеть, как это делается)

  • другой вариант: это делается через ElementStyle или EditingElementStyle

, здесь больше хлопот, потому что ElementStyle и EditingElementStyleопределены в столбце, что означает, что вы должны редактировать ElementStyle и EditingElementStyle.

каждого столбца, но в основном это одно и то же: вы устанавливаете FocusVisualStyle в значение null или стиль, определенный выше, с помощьюElementStyle и / или EditingElementStyle в каждой колонке

9 голосов
/ 29 марта 2011

Вы можете установить Focusable на False.

<DataGrid ...
      SelectionUnit="FullRow">
   <DataGrid.CellStyle>
      <Style TargetType="DataGridCell">
         <Setter Property="BorderThickness" Value="0"/>
         <Setter Property="Focusable" Value="False"/>
      </Style>
   </DataGrid.CellStyle>
   <!-- ... -->
</DataGrid>

Обратите внимание, что если вы сделаете DataGridCell.Focusable false, навигация в сетке данных с помощью клавиш со стрелками вверх / вниз не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...