2013-11-16 6 views
2

Я вычисления логарифмических склоны между точками (которые пользователь вставил):Смещение строки в DataGrid

enter image description here

Для этого я использую два DataGrid; сначала отображает координаты, а второй отображает склоны. Я использую пару DataGrid, потому что мне нужно обновить кривую, отличающуюся тем, что было изменено, координатами или наклоном.

Я хотел бы лучше показать значения наклонов: вместо того, чтобы отображаться в одной строке с точками, они должны отображаться между точками, как показано на втором рисунке.

Я не знаю, как это сделать в WPF, возможно, установив большее значение в Height заголовка второго DataGrid, так что все строки будут немного перемещены (приблизительно 5 пикселей), но я не могу найти способ сделать это.

Может ли кто-нибудь помочь мне достичь этого?

DataGrid определяется довольно стандартным способом:

<DataGrid x:Name="gridSlope" ItemsSource="{Binding Points, Mode=TwoWay}" 
     AutoGenerateColumns="False" Width="100" 
     Background="#19B0C4DE" BorderThickness="1" 
     BorderBrush="#19D3D3D3" CanUserResizeColumns="False" 
     CanUserResizeRows="False" CanUserSortColumns="False" 
     ClipboardCopyMode="IncludeHeader" 
     CellEditEnding="s1GridPendiente_CellEditEnding"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=Slope, StringFormat='{}{0:0.00}', 
              Mode=TwoWay, 
              UpdateSourceTrigger=PropertyChanged}" 
      Header="dB/oct"/> 
    </DataGrid.Columns> 
</DataGrid> 

enter image description here

+0

может» t вы просто добавляете некоторый запас вверху к этому datagrid? – Noctis

+0

Заголовок не будет выровнен таким образом. – Sturm

+0

Можете ли вы объяснить немного больше, почему вам нужны 2 решетки? Это потому, что у вас есть 2 источника данных? Можно ли их объединить в один источник данных? – grantnz

ответ

1

Вот скриншот:

enter image description here

Чтобы достичь этого, вы можете добавить этот

<DataGrid.ColumnHeaderStyle> 
    <Style TargetType="{x:Type DataGridColumnHeader}"> 
     <Setter Property="FontWeight" Value="Bold"/> 
     <Setter Property="Margin" Value="0 0 0 10"></Setter> 
    </Style> 
</DataGrid.ColumnHeaderStyle> 

к вашему <DataGrid x:Name="gridSlope" ... перед <DataGrid.Columns>.

Вы можете играть с запасом там, или делать то, что вы хотите :) (и удалить жирный, если вам не нравится это ... Я просто дурачиться с ним ...)

+0

Спасибо, это сработало. Последнее, что нужно сделать для этой проблемы, - это скрыть последнее значение «0.00», но я думаю, что я должен открыть для этого новый вопрос! – Sturm

+0

Если вы говорите о склоне, то да, у вас будет n-1 очков в этом массиве. Вероятно, вы могли бы просто обрезать последнюю точку. В любом случае, рад, что я мог бы помочь (и что это была маржа, как мой комментарий предложил;). – Noctis

1

Следующая не является совершенным, но близко к тому, что вы после этого. Проблема с этой идеей заключается в том, что DataGridRow зажимает свой контент, поэтому вы не можете перемещать 3-й столбец так далеко, как было бы идеально.

enter image description here

<DataGrid ItemsSource="{Binding Data}" AutoGenerateColumns="False" GridLinesVisibility="None"> 

     <DataGrid.Columns> 
      <DataGridTextColumn Header="A" Binding="{Binding A}"/> 
      <DataGridTextColumn Header="B" Binding="{Binding B}"/> 
      <DataGridTemplateColumn Header="C" Width="Auto"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=C}" Margin="0,5,0,-2"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 


public class DataClass 
{ 
    public int A { get; set; } 
    public int B { get; set; } 
    public String C { get; set; } 

    public DataClass(int a, int b, String c) 
    { 
     A = a; 
     B = b; 
     C = c; 
    } 
} 

    public List<DataClass> Data { get; set; } 
    public MainWindow() 
    { 
     Data = new List<DataClass>() { new DataClass(1, 2, "3"), new DataClass(2, 3, "4"), new DataClass(3, 4, "5"), new DataClass(4, 5, "") }; 
     DataContext = this; 
     InitializeComponent(); 
    } 
Смежные вопросы