DataGrid中的偏移行

时间:2013-11-16 01:49:19

标签: c# wpf datagrid

我正在计算点(用户插入的点)之间的对数斜率:

enter image description here

为此,我使用两个DataGrid;首先显示坐标,第二个显示斜率。我正在使用一对DataGrid,因为我需要更新曲线来区分已更改的内容,坐标或斜率。

我希望更好地显示斜率的值:而不是显示在与点相同的行中,它们应显示在点之间,如第二个图所示。

我不知道在WPF中这样做的方法,也许设置一个更大的值到第二个DataGrid的标题的高度,所以所有行将移位一点(约5px),但我找不到这样做的方法。

有人可以指导我实现这个目标吗?

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

2 个答案:

答案 0 :(得分: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();
    }

答案 1 :(得分: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>

你可以在那里玩边缘,或者做你想做的事情:)(如果你不喜欢它就删除粗体......我只是在玩弄它......)