2011-10-31 4 views
6

Buduję aplikację w WPF na niestandardową potrzebę. Najpierw zdecydowałem się na niestandardowe sterowanie, ale później zorientowałem się, że wiele z tego, co potrzebowałem, zostało już zaimplementowane w Datagrid Control. Jednak nie jest małe usterki:Jak wymusić zero pikseli Przerw między kolejnymi komórkami w WPF DataGrid

Problem DataGrid że wymusza minimum 2 pikseli szczeliny między dwoma następującymi po sobie ogniw (1 po każdej stronie linii siatki). Proszę spojrzeć na poniższy wykres dla jasności:

. Uwaga lukę 2 pikseli egzekwowane przez DataGrid pomiędzy dwoma kolejnymi komórkami: http://img265.imageshack.us/img265/3545/figurem.png

(przepełnienie stosu nie pozwolił mi dodać zdjęcie do mojego pytania, powołując się na zasadę ochrony spam dla nowych użytkowników)

.

To nie odpowiada moim wymaganiom, ponieważ chcę, aby treść wyglądała na "ciągłą" (Nie może być luki 2 pikseli, chcę, żeby linie łączące wyglądały "połączone"). Próbowałem wiercić z GridLinesVisibility, ale to nie pomogło. DataGrid jest gospodarzem niestandardowego formantu tak:

<DataGrid.Columns> 
      <DataGridTemplateColumn Width="25" Header=""> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ContentControl Content="{Binding Path=MyCustomControl}" Margin="0"></ContentControl> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

.... 
</DataGrid.Columns> 

mam dotąd próbowałem:

  1. Wyłączanie linia siatki (patrz prowadzić tutaj: http://img263.imageshack.us/img263/8602/figure2j.png)
  2. Ustawianie marginesu właściwości content do 0.
  3. Przeszukano google i stackoverflow
  4. Consulted some books.

ale nic nie wydaje się wymyślić.

Czy istnieje rozwiązanie tego/niektóre hack lub obejścia lub musiałbym utworzyć wszystko od zera? Mam przyzwoite doświadczenie z C#, ale jestem nowy w WPF.

Proszę o pomoc.

Odpowiedz

4

Co trzeba zrobić, to dostać w stylu DataGridCell dla DataGrid i ustaw jego BorderThickness być 0. To zakodowane jako 1 w domyślnym stylu, ale na szczęście jest to łatwe, aby zastąpić to:

<Style TargetType="DataGridCell"> 
    <Setter Property="BorderThickness" Value="0" /> 
</Style> 

Sugerowałbym umieszczenie go w zasobach twojej DataGrid, aby wpływał tylko na tę jedną siatkę, chyba że chcesz, aby miał większy zasięg.

<DataGrid> 
    <DataGrid.Resources> 
     <Style TargetType="DataGridCell">...</Style> 
    </DataGrid.Resources> 
    ... 
</DataGrid> 

Są inne miejsca, w które można je umieścić, w zależności od konkretnych potrzeb.

+0

Wow! To się udało! To zaoszczędziło mi dużo czasu! nie mogłem o tym myśleć. Wielkie dzięki! –