0

我正在尝试在 WPF 中重新实现一个表单,该表单在 winforms 中相当容易编程并且看不到如何进行。该表单由三个窗格组成。右侧窗格包含详细数据 - 包含值 Y 或空白的标志列,而左侧两个窗格包含汇总列之间匹配和差异的矩阵。

右侧窗格中的列数 (n) 是可变的,左侧的两个窗格是 n X n - 所以它们的大小也是动态的。当用户单击左侧窗格中的一个单元格时,它会突出显示并用于突出显示右侧窗格中的相应列。

例如,考虑匹配单元格 1,2 的情况。让我们假设它包含值 2,并且差异的 1,2 单元格包含 3。当单击单元格 1,2 时,它以绿色突出显示,差异面板上的相应单元格以红色突出显示,并且第 1 列和第 2 列用匹配项进行标记,导致 2 个对应的条目以绿色突出显示,3 个单个条目以红色突出显示:

                                 Column1 Column 2
                        green         Y      Y
                        red           Y
                        green         Y      Y
                        red                  Y
                        red                  Y

我决定使用列表视图在 WPF 中实现这一点。由于数组的大小可变,我决定以编程方式设置网格视图。这是代码的一部分(在 VB.net 中):

Private Sub DefineColumns(ByRef _GridView As GridView, MaxIndex As Integer)
    With _GridView
        For i = 0 To MaxIndex
            Dim _ColumnTitle = "P" & (i + 1)

            Dim _TextBlock = New FrameworkElementFactory(GetType(TextBlock))
            Dim _Binding = New Binding(_ColumnTitle)
            _TextBlock.SetBinding(TextBlock.TextProperty, _Binding)
            _TextBlock.SetValue(HorizontalAlignmentProperty, Windows.HorizontalAlignment.Right)
            Dim _DataTemplate = New DataTemplate()
            _DataTemplate.VisualTree = _TextBlock

            Dim _Column = New GridViewColumn()
            With _Column
                .CellTemplate = _DataTemplate
                .Header = (i + 1)
                .Width = 39
            End With
            .Columns.Add(_Column)
        Next
    End With
End Sub

WPF 表单有效 - 但我怎样才能实现我需要的突出显示?我真的需要以某种方式对其进行编程,在我看来,触发器没有任何用处,因为我真的想永久标记事物,以便我可以滚动右侧窗格。我需要做的就是在左侧窗格中标记两个选定的单元格,然后在右侧窗格中向下循环选定的列,将匹配标记为绿色,将差异标记为红色。任何人都可以帮忙吗?原则上看起来很简单,但使用 WPF 简单的事情有时可能会非常复杂。

4

1 回答 1

1

我在这里没有得到任何答案,所以我决定缩小我的问题范围并在 MSDN 上提问。然后我设法解决了这个问题。我的答案可以在这里找到: http ://social.msdn.microsoft.com/Forums/en-US/wpf/thread/6d68c606-d71e-4f89-a016-1e344d784467/#978f068f-a956-411b-b3d1-df8ac4a92cd8

于 2012-04-16T13:01:40.420 回答