Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击时高亮显示WPF列表视图中的已编程单元格_Wpf_Listview_Highlight_Cells - Fatal编程技术网

单击时高亮显示WPF列表视图中的已编程单元格

单击时高亮显示WPF列表视图中的已编程单元格,wpf,listview,highlight,cells,Wpf,Listview,Highlight,Cells,我正在尝试在WPF中重新实现一个表单,这个表单在winforms中编程相当容易,但看不到如何进行。表单由三个窗格组成。右侧窗格包含详细数据-包含值Y或为空的标志列,而两个左侧窗格包含汇总列之间匹配和差异的矩阵 右侧窗格中的列数(n)是可变的,而左侧窗格中的两个列数是nxn,因此它们的大小也是动态的。当用户单击其中一个左侧窗格中的单元格时,该单元格将高亮显示,并用于高亮显示右侧窗格中的相应列 例如,考虑匹配的单元格1,2的情况。让我们假设它包含值2,差异的1,2单元格包含3。单击单元格1,2时,它

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

右侧窗格中的列数(n)是可变的,而左侧窗格中的两个列数是nxn,因此它们的大小也是动态的。当用户单击其中一个左侧窗格中的单元格时,该单元格将高亮显示,并用于高亮显示右侧窗格中的相应列

例如,考虑匹配的单元格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
我决定使用listview在WPF中实现这一点。由于数组大小可变,我决定以编程方式设置网格视图。以下是部分代码(在VB.net中):


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

我在这里没有得到任何答案,所以我决定缩小我的问题范围,在MSDN上提问。然后我设法解决了这个问题。我的答案可以在这里找到:

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