- aggiunto componente EgwDataGrid
- migrato a packages.config
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
Imports System.ComponentModel
|
||||
Imports System.Runtime.CompilerServices
|
||||
|
||||
Public Class ColumnLayout
|
||||
Implements INotifyPropertyChanged
|
||||
|
||||
Public Property Key As String = ""
|
||||
|
||||
Private _widthValue As Double
|
||||
|
||||
Public Property WidthValue As Double
|
||||
Get
|
||||
Return _widthValue
|
||||
End Get
|
||||
Set(value As Double)
|
||||
_widthValue = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _widthUnitType As DataGridLengthUnitType = DataGridLengthUnitType.Pixel
|
||||
|
||||
Public Property WidthUnitType As DataGridLengthUnitType
|
||||
Get
|
||||
Return _widthUnitType
|
||||
End Get
|
||||
Set(value As DataGridLengthUnitType)
|
||||
_widthUnitType = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _isVisible As Boolean = True
|
||||
|
||||
Public Property IsVisible As Boolean
|
||||
Get
|
||||
Return _isVisible
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
_isVisible = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _sortDirection As Nullable(Of ListSortDirection) = Nothing
|
||||
Public Property SortDirection As Nullable(Of ListSortDirection)
|
||||
Get
|
||||
Return _sortDirection
|
||||
End Get
|
||||
Set(value As Nullable(Of ListSortDirection))
|
||||
_sortDirection = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _canUserResize As Boolean = True
|
||||
|
||||
Public Property CanUserResize As Boolean
|
||||
Get
|
||||
Return _canUserResize
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
_canUserResize = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _canUserReorder As Boolean = True
|
||||
|
||||
Public Property CanUserReorder As Boolean
|
||||
Get
|
||||
Return _canUserReorder
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
_canUserReorder = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _canUserReorderUserEditable As Boolean = True
|
||||
|
||||
Public Property CanUserReorderUserEditable As Boolean
|
||||
Get
|
||||
Return _canUserReorderUserEditable
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
_canUserReorderUserEditable = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _canUserSort As Boolean = True
|
||||
|
||||
Public Property CanUserSort As Boolean
|
||||
Get
|
||||
Return _canUserSort
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
_canUserSort = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _isReadOnly As Boolean = False
|
||||
|
||||
Public Property IsReadOnly As Boolean
|
||||
Get
|
||||
Return _isReadOnly
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
_isReadOnly = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private _isVisibilityUserEditable As Boolean = True
|
||||
|
||||
Public Property IsVisibilityUserEditable As Boolean
|
||||
Get
|
||||
Return _isVisibilityUserEditable
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
_isVisibilityUserEditable = value
|
||||
NotifyPropertyChanged()
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Sub New()
|
||||
End Sub
|
||||
|
||||
Sub New(Key As String, WidthUnitType As DataGridLengthUnitType, WidthValue As Double, IsVisible As Boolean, SortDirection As Nullable(Of ListSortDirection), CanUserResize As Boolean, CanUserReorder As Boolean, CanUserSort As Boolean, IsReadOnly As Boolean, IsVisibilityUserEditable As Boolean, CanUserReorderUserEditable As Boolean)
|
||||
_Key = Key
|
||||
_widthUnitType = WidthUnitType
|
||||
_widthValue = WidthValue
|
||||
_isVisible = IsVisible
|
||||
_sortDirection = SortDirection
|
||||
_canUserResize = CanUserResize
|
||||
_canUserReorder = CanUserReorder
|
||||
_canUserSort = CanUserSort
|
||||
_isReadOnly = IsReadOnly
|
||||
_isVisibilityUserEditable = IsVisibilityUserEditable
|
||||
_canUserReorderUserEditable = CanUserReorderUserEditable
|
||||
End Sub
|
||||
|
||||
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
|
||||
|
||||
Public Sub NotifyPropertyChanged(<CallerMemberName> Optional propName As String = Nothing)
|
||||
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
@@ -0,0 +1,476 @@
|
||||
' Follow steps 1a or 1b and then 2 to use this custom control in a XAML file.
|
||||
'
|
||||
' Step 1a) Using this custom control in a XAML file that exists in the current project.
|
||||
' Add this XmlNamespace attribute to the root element of the markup file where it is
|
||||
' to be used:
|
||||
'
|
||||
' xmlns:MyNamespace="clr-namespace:WpfApp23"
|
||||
'
|
||||
'
|
||||
' Step 1b) Using this custom control in a XAML file that exists in a different project.
|
||||
' Add this XmlNamespace attribute to the root element of the markup file where it is
|
||||
' to be used:
|
||||
'
|
||||
' xmlns:MyNamespace="clr-namespace:WpfApp23;assembly=WpfApp23"
|
||||
'
|
||||
' You will also need to add a project reference from the project where the XAML file lives
|
||||
' to this project and Rebuild to avoid compilation errors:
|
||||
'
|
||||
' Right click on the target project in the Solution Explorer and
|
||||
' "Add Reference"->"Projects"->[Browse to and select this project]
|
||||
'
|
||||
'
|
||||
' Step 2)
|
||||
' Go ahead and use your control in the XAML file. Note that Intellisense in the
|
||||
' XML editor does not currently work on custom controls and its child elements.
|
||||
'
|
||||
' <MyNamespace:EgtDataGrid/>
|
||||
'
|
||||
|
||||
Imports System.Collections.ObjectModel
|
||||
Imports System.Collections.Specialized
|
||||
Imports System.IO
|
||||
Imports System.Windows.Controls.Primitives
|
||||
Imports System.Windows.Threading
|
||||
Imports Newtonsoft.Json
|
||||
|
||||
Public Class EgwDataGrid
|
||||
Inherits DataGrid
|
||||
|
||||
Public Property IsTableLocked As Boolean
|
||||
Get
|
||||
Return CBool(GetValue(IsTableLockedProperty))
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
SetValue(IsTableLockedProperty, value)
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Shared ReadOnly IsTableLockedProperty As DependencyProperty =
|
||||
DependencyProperty.Register(NameOf(IsTableLocked), GetType(Boolean), GetType(EgwDataGrid),
|
||||
New PropertyMetadata(False, AddressOf OnTableLockedChanged))
|
||||
|
||||
Public Property ColumnLayouts As ObservableCollection(Of ColumnLayout)
|
||||
Get
|
||||
Return CType(GetValue(ColumnLayoutsProperty), ObservableCollection(Of ColumnLayout))
|
||||
End Get
|
||||
Set(value As ObservableCollection(Of ColumnLayout))
|
||||
SetValue(ColumnLayoutsProperty, value)
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Shared ReadOnly ColumnLayoutsProperty As DependencyProperty =
|
||||
DependencyProperty.Register(NameOf(ColumnLayouts), GetType(ObservableCollection(Of ColumnLayout)),
|
||||
GetType(EgwDataGrid), New PropertyMetadata(Nothing, AddressOf OnColumnLayoutsChanged))
|
||||
|
||||
Private Shared Sub OnColumnLayoutsChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
|
||||
If TypeOf d IsNot EgwDataGrid Or TypeOf e.NewValue IsNot ObservableCollection(Of ColumnLayout) Then Return
|
||||
Dim grid As EgwDataGrid = DirectCast(d, EgwDataGrid)
|
||||
Dim layouts As ObservableCollection(Of ColumnLayout) = DirectCast(e.NewValue, ObservableCollection(Of ColumnLayout))
|
||||
AddHandler layouts.CollectionChanged, AddressOf grid.Layouts_CollectionChanged
|
||||
For Each layout In layouts
|
||||
grid.AddColumnFromLayout(layout)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Private Shared Sub OnTableLockedChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
|
||||
If TypeOf d Is EgwDataGrid AndAlso TypeOf e.NewValue Is Boolean Then
|
||||
Dim grid As EgwDataGrid = DirectCast(d, EgwDataGrid)
|
||||
Dim locked As Boolean = DirectCast(e.NewValue, Boolean)
|
||||
grid.ApplyLockToAllColumns(locked)
|
||||
grid.RefreshAllHeaderMenus()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Shared ReadOnly LockAutoColumnProperty As DependencyProperty =
|
||||
DependencyProperty.Register(NameOf(LockAutoColumn), GetType(Boolean), GetType(EgwDataGrid),
|
||||
New PropertyMetadata(True))
|
||||
|
||||
Public Property LockAutoColumn As Boolean
|
||||
Get
|
||||
Return CBool(GetValue(LockAutoColumnProperty))
|
||||
End Get
|
||||
Set(ByVal value As Boolean)
|
||||
SetValue(LockAutoColumnProperty, value)
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Shared ReadOnly HeaderContextMenuStyleProperty As DependencyProperty =
|
||||
DependencyProperty.Register(NameOf(HeaderContextMenuStyle), GetType(Style), GetType(EgwDataGrid), New PropertyMetadata(Nothing))
|
||||
|
||||
Public Property HeaderContextMenuStyle As Style
|
||||
Get
|
||||
Return CType(GetValue(HeaderContextMenuStyleProperty), Style)
|
||||
End Get
|
||||
Set(value As Style)
|
||||
SetValue(HeaderContextMenuStyleProperty, value)
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Public Shared ReadOnly HeaderContextMenuItemStyleProperty As DependencyProperty =
|
||||
DependencyProperty.Register(NameOf(HeaderContextMenuItemStyle), GetType(Style), GetType(EgwDataGrid), New PropertyMetadata(Nothing))
|
||||
|
||||
Public Property HeaderContextMenuItemStyle As Style
|
||||
Get
|
||||
Return CType(GetValue(HeaderContextMenuItemStyleProperty), Style)
|
||||
End Get
|
||||
Set(value As Style)
|
||||
SetValue(HeaderContextMenuItemStyleProperty, value)
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private ReadOnly _columnToLayout As New Dictionary(Of DataGridColumn, ColumnLayout)
|
||||
|
||||
Private Sub Layouts_CollectionChanged(sender As Object, e As NotifyCollectionChangedEventArgs)
|
||||
Select Case e.Action
|
||||
Case NotifyCollectionChangedAction.Add
|
||||
For Each layout As ColumnLayout In e.NewItems
|
||||
AddColumnFromLayout(layout)
|
||||
Next
|
||||
Case NotifyCollectionChangedAction.Remove
|
||||
For Each layout As ColumnLayout In e.OldItems
|
||||
RemoveColumnFromLayout(layout)
|
||||
Next
|
||||
Case NotifyCollectionChangedAction.Replace
|
||||
For Each oldLayout As ColumnLayout In e.OldItems
|
||||
RemoveColumnFromLayout(oldLayout)
|
||||
Next
|
||||
For Each newLayout As ColumnLayout In e.NewItems
|
||||
AddColumnFromLayout(newLayout)
|
||||
Next
|
||||
Case NotifyCollectionChangedAction.Reset
|
||||
' Rimuove tutte le colonne esistenti usando RemoveColumnFromLayout
|
||||
Dim layoutsToRemove = _columnToLayout.Values.ToList()
|
||||
For Each layout In layoutsToRemove
|
||||
RemoveColumnFromLayout(layout)
|
||||
Next
|
||||
|
||||
' Ricostruisce le colonne da ColumnLayouts
|
||||
For Each layout In ColumnLayouts
|
||||
AddColumnFromLayout(layout)
|
||||
Next
|
||||
UpdateDisplayIndexes()
|
||||
End Select
|
||||
End Sub
|
||||
|
||||
Private Sub AddColumnFromLayout(layout As ColumnLayout)
|
||||
If Resources.Contains(layout.Key) Then
|
||||
Dim baseColumn As DataGridColumn = TryCast(Resources(layout.Key), DataGridColumn)
|
||||
If Not IsNothing(baseColumn) Then
|
||||
Dim column As DataGridColumn = CloneColumn(baseColumn)
|
||||
ApplyLayout(column, layout)
|
||||
Columns.Add(column)
|
||||
_columnToLayout(column) = layout
|
||||
|
||||
AddHandler layout.PropertyChanged, Sub(sender, args)
|
||||
ApplyLayout(column, layout)
|
||||
If (args.PropertyName = NameOf(ColumnLayout.IsVisible) AndAlso layout.IsVisible) Then
|
||||
GenerateHeaderEvents(column, layout)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
If IsTableLocked Then
|
||||
layout.CanUserResize = False
|
||||
layout.CanUserReorder = False
|
||||
layout.CanUserSort = False
|
||||
layout.IsReadOnly = True
|
||||
End If
|
||||
|
||||
AddHandler Me.ColumnReordered, Sub(s, args)
|
||||
Dim l = Nothing
|
||||
If _columnToLayout.TryGetValue(args.Column, l) Then
|
||||
Dim oldIndex = ColumnLayouts.IndexOf(l)
|
||||
ColumnLayouts.Move(oldIndex, args.Column.DisplayIndex)
|
||||
End If
|
||||
End Sub
|
||||
AddHandler Me.Sorting, Sub(s, args)
|
||||
Dim l = Nothing
|
||||
If _columnToLayout.TryGetValue(args.Column, l) Then l.SortDirection = args.Column.SortDirection
|
||||
End Sub
|
||||
|
||||
GenerateHeaderEvents(column, layout)
|
||||
UpdateDisplayIndexes()
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub GenerateHeaderEvents(column As DataGridColumn, layout As ColumnLayout)
|
||||
Dispatcher.BeginInvoke(New Action(Sub()
|
||||
Dim header = FindHeaderForColumn(column)
|
||||
If header IsNot Nothing Then
|
||||
header.ContextMenu = CreateHeaderContextMenu(layout)
|
||||
|
||||
AddHandler header.SizeChanged, Sub(s, e)
|
||||
' Blocca il resize solo se LockAutoColumn è attivo e il layout è Auto
|
||||
If LockAutoColumn AndAlso layout.WidthUnitType = DataGridLengthUnitType.Auto Then Return
|
||||
|
||||
' Se il layout è Auto ma LockAutoColumn è disattivato, converti in Pixel
|
||||
If layout.WidthUnitType = DataGridLengthUnitType.Auto Then
|
||||
column.Width = New DataGridLength(column.ActualWidth, DataGridLengthUnitType.Pixel)
|
||||
layout.WidthUnitType = DataGridLengthUnitType.Pixel
|
||||
End If
|
||||
|
||||
layout.WidthValue = column.ActualWidth
|
||||
|
||||
AdjustLastColumnFillMode()
|
||||
End Sub
|
||||
End If
|
||||
End Sub), DispatcherPriority.Loaded)
|
||||
End Sub
|
||||
|
||||
Private Function GetAvailableWidth() As Double
|
||||
Dim presenter = FindVisualChild(Of DataGridCellsPresenter)(Me)
|
||||
If presenter IsNot Nothing Then
|
||||
Return presenter.ActualWidth
|
||||
End If
|
||||
Return ActualWidth ' fallback
|
||||
End Function
|
||||
|
||||
Private Function GetTotalColumnWidth() As Double
|
||||
Return Columns.Where(Function(c) c.Visibility = Visibility.Visible).Sum(Function(c) c.ActualWidth)
|
||||
End Function
|
||||
|
||||
Private Sub AdjustLastColumnFillMode()
|
||||
Dim availableWidth = GetAvailableWidth()
|
||||
Dim totalWidth = GetTotalColumnWidth()
|
||||
Dim lastVisible = Columns.Where(Function(c) c.Visibility = Visibility.Visible).LastOrDefault()
|
||||
|
||||
If lastVisible Is Nothing OrElse Not _columnToLayout.ContainsKey(lastVisible) Then Exit Sub
|
||||
|
||||
Dim layout = _columnToLayout(lastVisible)
|
||||
|
||||
If layout.WidthUnitType = DataGridLengthUnitType.Auto Then Exit Sub
|
||||
|
||||
If totalWidth < availableWidth Then
|
||||
' Switch to Star to fill remaining space
|
||||
lastVisible.Width = New DataGridLength(1, DataGridLengthUnitType.Star)
|
||||
layout.WidthUnitType = DataGridLengthUnitType.Star
|
||||
layout.WidthValue = 1
|
||||
ElseIf layout.WidthUnitType = DataGridLengthUnitType.Star Then
|
||||
' Revert to Pixel if total width exceeds available
|
||||
lastVisible.Width = New DataGridLength(lastVisible.ActualWidth, DataGridLengthUnitType.Pixel)
|
||||
layout.WidthUnitType = DataGridLengthUnitType.Pixel
|
||||
layout.WidthValue = lastVisible.ActualWidth
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub RemoveColumnFromLayout(layout As ColumnLayout)
|
||||
Dim column = _columnToLayout.FirstOrDefault(Function(c) c.Value Is layout).Key
|
||||
If column IsNot Nothing Then
|
||||
Columns.Remove(column)
|
||||
_columnToLayout.Remove(column)
|
||||
End If
|
||||
ColumnLayouts.Remove(layout)
|
||||
UpdateDisplayIndexes()
|
||||
End Sub
|
||||
|
||||
Private Sub ApplyLayout(column As DataGridColumn, layout As ColumnLayout)
|
||||
column.Width = New DataGridLength(layout.WidthValue, layout.WidthUnitType)
|
||||
column.Visibility = If(layout.IsVisible, Visibility.Visible, Visibility.Collapsed)
|
||||
column.SortDirection = layout.SortDirection
|
||||
|
||||
If LockAutoColumn AndAlso layout.WidthUnitType = DataGridLengthUnitType.Auto Then
|
||||
column.CanUserResize = False
|
||||
Else
|
||||
column.CanUserResize = layout.CanUserResize
|
||||
End If
|
||||
|
||||
column.CanUserReorder = layout.CanUserReorder
|
||||
column.CanUserSort = layout.CanUserSort
|
||||
column.IsReadOnly = layout.IsReadOnly
|
||||
End Sub
|
||||
|
||||
Private Sub ApplyLockToAllColumns(ByVal locked As Boolean)
|
||||
For Each kvp In _columnToLayout
|
||||
Dim column = kvp.Key
|
||||
Dim layout = kvp.Value
|
||||
|
||||
If locked Then
|
||||
column.CanUserResize = False
|
||||
column.CanUserReorder = False
|
||||
column.CanUserSort = False
|
||||
Else
|
||||
' Quando sblocchi, risincronizzi con il layout
|
||||
ApplyLayout(column, layout)
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Private Function CloneColumn(original As DataGridColumn) As DataGridColumn
|
||||
Dim clone = DirectCast(Activator.CreateInstance(original.GetType()), DataGridColumn)
|
||||
clone.Header = original.Header
|
||||
clone.SortMemberPath = original.SortMemberPath
|
||||
clone.Visibility = original.Visibility
|
||||
clone.Width = original.Width
|
||||
clone.CellStyle = original.CellStyle
|
||||
clone.HeaderStyle = original.HeaderStyle
|
||||
|
||||
If TypeOf original Is DataGridBoundColumn AndAlso TypeOf clone Is DataGridBoundColumn Then
|
||||
Dim boundOriginal As DataGridBoundColumn = DirectCast(original, DataGridBoundColumn)
|
||||
Dim boundClone As DataGridBoundColumn = DirectCast(clone, DataGridBoundColumn)
|
||||
boundClone.Binding = boundOriginal.Binding
|
||||
End If
|
||||
|
||||
If TypeOf original Is DataGridTemplateColumn AndAlso TypeOf clone Is DataGridTemplateColumn Then
|
||||
Dim templateOriginal As DataGridTemplateColumn = DirectCast(original, DataGridTemplateColumn)
|
||||
Dim templateClone As DataGridTemplateColumn = DirectCast(clone, DataGridTemplateColumn)
|
||||
templateClone.CellTemplate = templateOriginal.CellTemplate
|
||||
templateClone.CellEditingTemplate = templateOriginal.CellEditingTemplate
|
||||
End If
|
||||
|
||||
Return clone
|
||||
End Function
|
||||
|
||||
Private Function FindHeaderForColumn(ByVal column As DataGridColumn) As DataGridColumnHeader
|
||||
Dim presenter = FindVisualChild(Of DataGridColumnHeadersPresenter)(Me)
|
||||
If presenter Is Nothing Then Return Nothing
|
||||
|
||||
For i As Integer = 0 To Columns.Count - 1
|
||||
Dim header = TryCast(presenter.ItemContainerGenerator.ContainerFromIndex(i), DataGridColumnHeader)
|
||||
If header?.Column Is column Then Return header
|
||||
Next
|
||||
|
||||
Return Nothing
|
||||
End Function
|
||||
|
||||
Private Function FindVisualChild(Of T As DependencyObject)(ByVal parent As DependencyObject) As T
|
||||
For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(parent) - 1
|
||||
Dim child = VisualTreeHelper.GetChild(parent, i)
|
||||
If TypeOf child Is T Then Return DirectCast(child, T)
|
||||
Dim result = FindVisualChild(Of T)(child)
|
||||
If result IsNot Nothing Then Return result
|
||||
Next
|
||||
Return Nothing
|
||||
End Function
|
||||
|
||||
Private Function CreateHeaderContextMenu(ByVal layout As ColumnLayout) As ContextMenu
|
||||
Dim menu = New ContextMenu()
|
||||
If HeaderContextMenuStyle IsNot Nothing Then
|
||||
menu.Style = HeaderContextMenuStyle
|
||||
End If
|
||||
If IsTableLocked Then
|
||||
menu.Items.Add(CreateToggleMenuItem("Lock Table", IsTableLocked, Sub(val) IsTableLocked = val))
|
||||
Else
|
||||
menu.Items.Add(CreateToggleMenuItem("Can Sort", layout.CanUserSort, Sub(val) layout.CanUserSort = val))
|
||||
If layout.CanUserReorderUserEditable Then
|
||||
menu.Items.Add(CreateToggleMenuItem("Can Reorder", layout.CanUserReorder, Sub(val) layout.CanUserReorder = val))
|
||||
End If
|
||||
|
||||
If layout.WidthUnitType <> DataGridLengthUnitType.Auto Then
|
||||
menu.Items.Add(CreateToggleMenuItem("Can Resize", layout.CanUserResize, Sub(val) layout.CanUserResize = val))
|
||||
End If
|
||||
|
||||
If layout.IsVisibilityUserEditable Then
|
||||
menu.Items.Add(CreateToggleMenuItem("Visible", layout.IsVisible, Sub(val)
|
||||
layout.IsVisible = val
|
||||
AdjustLastColumnFillMode()
|
||||
End Sub))
|
||||
End If
|
||||
|
||||
menu.Items.Add(New Separator())
|
||||
menu.Items.Add(CreateActionMenuItem("Reset Sort", Sub() layout.SortDirection = Nothing))
|
||||
menu.Items.Add(CreateToggleMenuItem("Lock Table", IsTableLocked, Sub(val) IsTableLocked = val))
|
||||
|
||||
Dim hiddenMenu = New MenuItem With {.Header = "Colonne nascoste",
|
||||
.Style = HeaderContextMenuItemStyle}
|
||||
hiddenMenu.Items.Add(New MenuItem With {.Header = "(nessuna)", .IsEnabled = False})
|
||||
|
||||
AddHandler hiddenMenu.SubmenuOpened, Sub()
|
||||
hiddenMenu.Items.Clear()
|
||||
Dim hiddenLayouts = ColumnLayouts.Where(Function(l) Not l.IsVisible AndAlso l.IsVisibilityUserEditable).ToList()
|
||||
If hiddenLayouts.Count = 0 Then
|
||||
hiddenMenu.Items.Add(New MenuItem With {.Header = "(nessuna)",
|
||||
.IsEnabled = False,
|
||||
.Style = HeaderContextMenuItemStyle})
|
||||
Else
|
||||
For Each hiddenLayout In hiddenLayouts
|
||||
Dim Column = _columnToLayout.FirstOrDefault(Function(c) c.Value Is hiddenLayout).Key
|
||||
Dim item = New MenuItem With {.Header = Column.Header,
|
||||
.Style = HeaderContextMenuItemStyle}
|
||||
AddHandler item.Click, Sub()
|
||||
hiddenLayout.IsVisible = True
|
||||
End Sub
|
||||
hiddenMenu.Items.Add(item)
|
||||
Next
|
||||
End If
|
||||
End Sub
|
||||
menu.Items.Add(hiddenMenu)
|
||||
End If
|
||||
|
||||
Return menu
|
||||
End Function
|
||||
|
||||
Private Sub RefreshAllHeaderMenus()
|
||||
For Each column In Columns
|
||||
Dim header = FindHeaderForColumn(column)
|
||||
If header IsNot Nothing AndAlso _columnToLayout.ContainsKey(column) Then
|
||||
header.ContextMenu = CreateHeaderContextMenu(_columnToLayout(column))
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Private Function CreateToggleMenuItem(ByVal label As String, ByVal currentValue As Boolean, ByVal setter As Action(Of Boolean)) As MenuItem
|
||||
Dim item = New MenuItem With {
|
||||
.Header = label,
|
||||
.IsCheckable = True,
|
||||
.IsChecked = currentValue
|
||||
}
|
||||
AddHandler item.Checked, Sub() setter(True)
|
||||
AddHandler item.Unchecked, Sub() setter(False)
|
||||
If HeaderContextMenuItemStyle IsNot Nothing Then
|
||||
item.Style = HeaderContextMenuItemStyle
|
||||
End If
|
||||
Return item
|
||||
End Function
|
||||
|
||||
Private Function CreateActionMenuItem(ByVal label As String, ByVal action As Action) As MenuItem
|
||||
Dim item = New MenuItem With {.Header = label}
|
||||
AddHandler item.Click, Sub() action()
|
||||
If HeaderContextMenuItemStyle IsNot Nothing Then
|
||||
item.Style = HeaderContextMenuItemStyle
|
||||
End If
|
||||
Return item
|
||||
End Function
|
||||
|
||||
Private Sub UpdateDisplayIndexes()
|
||||
For i As Integer = 0 To ColumnLayouts.Count - 1
|
||||
Dim layout = ColumnLayouts(i)
|
||||
Dim column = _columnToLayout.FirstOrDefault(Function(p) p.Value Is layout).Key
|
||||
If column IsNot Nothing Then
|
||||
column.DisplayIndex = i
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Shared Function WriteColumnLayout(path As String, Name As String, columns As ObservableCollection(Of ColumnLayout)) As Boolean
|
||||
Dim GridList As Dictionary(Of String, List(Of ColumnLayout))
|
||||
If File.Exists(path) Then
|
||||
Dim JsonOriginalContent = File.ReadAllText(path)
|
||||
GridList = JsonConvert.DeserializeObject(Of Dictionary(Of String, List(Of ColumnLayout)))(JsonOriginalContent)
|
||||
If GridList.ContainsKey(Name) Then
|
||||
GridList(Name) = columns.ToList()
|
||||
Else
|
||||
GridList.Add(Name, columns.ToList())
|
||||
End If
|
||||
Else
|
||||
GridList = New Dictionary(Of String, List(Of ColumnLayout))
|
||||
GridList.Add(Name, columns.ToList())
|
||||
End If
|
||||
Dim JsonNewContent = JsonConvert.SerializeObject(GridList, Formatting.Indented)
|
||||
File.WriteAllText(path, JsonNewContent)
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Public Shared Function ReadColumnLayout(path As String, Name As String, ByRef ColumnList As List(Of ColumnLayout)) As Boolean
|
||||
If Not File.Exists(path) Then Return False
|
||||
Dim JsonOriginalContent = File.ReadAllText(path)
|
||||
Dim GridList As Dictionary(Of String, List(Of ColumnLayout)) = JsonConvert.DeserializeObject(Of Dictionary(Of String, List(Of ColumnLayout)))(JsonOriginalContent)
|
||||
If GridList.ContainsKey(Name) Then
|
||||
ColumnList = GridList(Name)
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
End Function
|
||||
|
||||
End Class
|
||||
@@ -87,6 +87,8 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="EgtWindow\EgtWindow.vb" />
|
||||
<Compile Include="EgwDataGrid\ColumnLayout.vb" />
|
||||
<Compile Include="EgwDataGrid\EgwDataGrid.vb" />
|
||||
<Compile Include="My Project\AssemblyInfo.vb">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
|
||||
@@ -54,4 +54,17 @@
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<Style TargetType="{x:Type local:EgwDataGrid}">
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type local:EgwDataGrid}">
|
||||
<Border Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
</Border>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
</ResourceDictionary>
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
|
||||
<RootNamespace>EgwWPFBaseLib</RootNamespace>
|
||||
<AssemblyName>EgwWPFBaseLib</AssemblyName>
|
||||
<OutputType>Library</OutputType>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<MyType>Custom</MyType>
|
||||
<Deterministic>true</Deterministic>
|
||||
<ProjectGuid>{A80C1830-5DB1-419E-AD0C-BA91BE5BF5A9}</ProjectGuid>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<DefineDebug>true</DefineDebug>
|
||||
<DefineTrace>true</DefineTrace>
|
||||
<IncrementalBuild>true</IncrementalBuild>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DocumentationFile>EgwWPFBaseLib.xml</DocumentationFile>
|
||||
<NoWarn>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<DefineDebug>false</DefineDebug>
|
||||
<DefineTrace>true</DefineTrace>
|
||||
<IncrementalBuild>false</IncrementalBuild>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DocumentationFile>EgwWPFBaseLib.xml</DocumentationFile>
|
||||
<NoWarn>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314</NoWarn>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OptionExplicit>On</OptionExplicit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OptionCompare>Binary</OptionCompare>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OptionStrict>Off</OptionStrict>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<OptionInfer>On</OptionInfer>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.13.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xaml">
|
||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Page Include="Themes\Generic.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Import Include="System.Threading.Tasks" />
|
||||
<Import Include="System.Linq" />
|
||||
<Import Include="System.Xml.Linq" />
|
||||
<Import Include="Microsoft.VisualBasic" />
|
||||
<Import Include="System" />
|
||||
<Import Include="System.Collections" />
|
||||
<Import Include="System.Collections.Generic" />
|
||||
<Import Include="System.Diagnostics" />
|
||||
<Import Include="System.Windows" />
|
||||
<Import Include="System.Windows.Controls" />
|
||||
<Import Include="System.Windows.Data" />
|
||||
<Import Include="System.Windows.Documents" />
|
||||
<Import Include="System.Windows.Input" />
|
||||
<Import Include="System.Windows.Shapes" />
|
||||
<Import Include="System.Windows.Media" />
|
||||
<Import Include="System.Windows.Media.Imaging" />
|
||||
<Import Include="System.Windows.Navigation" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="EgtWindow\EgtWindow.vb" />
|
||||
<Compile Include="EgwDataGrid\ColumnLayout.vb" />
|
||||
<Compile Include="EgwDataGrid\EgwDataGrid.vb" />
|
||||
<Compile Include="My Project\AssemblyInfo.vb">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="My Project\Resources.Designer.vb">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="My Project\Settings.Designer.vb">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<Compile Include="Utility\Command.vb" />
|
||||
<Compile Include="Utility\GenInterface.vb" />
|
||||
<Compile Include="Utility\IdNameStruct.vb" />
|
||||
<Compile Include="Utility\IniFile.vb" />
|
||||
<Compile Include="Utility\StringConversion.vb" />
|
||||
<Compile Include="Utility\VMBase.vb" />
|
||||
<EmbeddedResource Include="My Project\Resources.resx">
|
||||
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
|
||||
<CustomToolNamespace>My.Resources</CustomToolNamespace>
|
||||
</EmbeddedResource>
|
||||
<None Include="My Project\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
|
||||
</None>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Readme.html" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
|
||||
<PropertyGroup>
|
||||
<PostBuildEvent>copy $(TargetPath) c:\EgtProg\Effector\EgwWPFBaseLib.dll</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,162 @@
|
||||
<!DOCTYPE html>
|
||||
<!-- saved from url=(0014)about:internet -->
|
||||
|
||||
<html xmlns:msxsl="urn:schemas-microsoft-com:xslt"><head><meta content="en-us" http-equiv="Content-Language" /><meta content="text/html; charset=utf-16" http-equiv="Content-Type" /><title _locID="NuGetUpgradeReportTitle">
|
||||
NuGetMigrationLog
|
||||
</title><style>
|
||||
|
||||
/* Body style, for the entire document */
|
||||
body
|
||||
{
|
||||
background: #F3F3F4;
|
||||
color: #1E1E1F;
|
||||
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
|
||||
font-size: 12pt;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Header1 style, used for the main title */
|
||||
h1
|
||||
{
|
||||
padding: 10px 0px 10px 10px;
|
||||
font-size: 21pt;
|
||||
background-color: #E2E2E2;
|
||||
border-bottom: 1px #C1C1C2 solid;
|
||||
color: #201F20;
|
||||
margin: 0;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
/* Header2 style, used for "Overview" and other sections */
|
||||
h2
|
||||
{
|
||||
font-size: 18pt;
|
||||
font-weight: normal;
|
||||
padding: 15px 0 5px 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Header3 style, used for sub-sections, such as project name */
|
||||
h3
|
||||
{
|
||||
font-weight: normal;
|
||||
font-size: 15pt;
|
||||
margin: 0;
|
||||
padding: 15px 0 5px 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.info-text
|
||||
{
|
||||
margin: 0px 0 0.75em 0;
|
||||
}
|
||||
|
||||
/* Color all hyperlinks one color */
|
||||
a
|
||||
{
|
||||
color: #1382CE;
|
||||
}
|
||||
|
||||
/* Table styles */
|
||||
table
|
||||
{
|
||||
border-spacing: 0 0;
|
||||
border-collapse: collapse;
|
||||
font-size: 11pt;
|
||||
}
|
||||
|
||||
table th
|
||||
{
|
||||
background: #E7E7E8;
|
||||
text-align: left;
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
padding: 3px 6px 3px 6px;
|
||||
}
|
||||
|
||||
table td
|
||||
{
|
||||
vertical-align: top;
|
||||
padding: 3px 6px 5px 5px;
|
||||
margin: 0px;
|
||||
border: 1px solid #E7E7E8;
|
||||
background: #F7F7F8;
|
||||
}
|
||||
|
||||
/* Local link is a style for hyperlinks that link to file:/// content, there are lots so color them as 'normal' text until the user mouse overs */
|
||||
.localLink
|
||||
{
|
||||
color: #1E1E1F;
|
||||
background: #EEEEED;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.localLink:hover
|
||||
{
|
||||
color: #1382CE;
|
||||
background: #FFFF99;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.issueCell
|
||||
{
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.packageIssue
|
||||
{
|
||||
margin-left: 25px;
|
||||
}
|
||||
|
||||
/* Padding around the content after the h1 */
|
||||
#content
|
||||
{
|
||||
padding: 0px 20px 20px 20px;
|
||||
}
|
||||
|
||||
.issues table
|
||||
{
|
||||
width: 97%;
|
||||
}
|
||||
|
||||
/* All Icons */
|
||||
.IconSuccessEncoded, .IconInfoEncoded, .IconWarningEncoded, .IconErrorEncoded
|
||||
{
|
||||
min-width:18px;
|
||||
min-height:18px;
|
||||
background-repeat:no-repeat;
|
||||
background-position:center;
|
||||
}
|
||||
|
||||
.IconSuccessEncoded
|
||||
{
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABcElEQVR4Xq2TsUsCURzHv15g8ZJcBWlyiYYgCIWcb9DFRRwMW5TA2c0/QEFwFkxxUQdxVlBwCYWOi6IhWgQhBLHJUCkhLr/BW8S7gvrAg+N+v8/v+x68Z8MGy+XSCyABQAXgBgHGALoASkIIDWSLeLBetdHryMjd5IxQPWT4rn1c/P7+xxp72Cs9m5SZ0Bq2vPnbPFafK2zDvmNHypdC0BPkLlQhxJsCAhQoZwdZU5mwxh720qGo8MzTxTTKZDPCx2HoVzp6lz0Q9tKhyx0kGs8Ny+TkWRKk8lCROwEduhyg9l/6lunOPSfmH3NUH6uQ0KHLAe7JYvJjevm+DAMGJHToKtigE+vwvIidxLamb8IBY9e+C5LiXREkfho3TSd06HJA13/oh6T51MTsfQbHrsMynQ5dDihFjiK8JJAU9AKIWTp76dCVN7HWHrajmUEGvyF9nkbAE6gLIS7kTUyuf2gscLoJrElZo/Mvj+nPz/kLTmfnEwP3tB0AAAAASUVORK5CYII=);
|
||||
}
|
||||
|
||||
.IconInfoEncoded
|
||||
{
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHElEQVR4Xs2TsUoDQRRF7wwoziokjZUKadInhdhukR9YP8DMX1hYW+QvdsXa/QHBbcXC7W0CamWTQnclFutceIQJwwaWNLlwm5k5d94M76mmaeCrrmsLYOocY12FcxZFUeozCqKqqgYA8uevv1H6VuPxcwlfk5N92KHBxfFeCSAxxswlYAW/Xr989x/mv9gkhtyMDhcAxgzRsp7flj8B/HF1RsMXq+NZMkopaHe7lbKxQUEIGbKsYNoGn969060hZBkQex/W8oRQwsQaW2o3Ago2SVcJUzAgY3N0lTCZZm+zPS8HB51gMmS1DEYyOz9acKO1D8JWTlafKIMxdhvlfdyT94Vv5h7P8Ky7nQzACmhvKq3zk3PjW9asz9D/1oigecsioooAAAAASUVORK5CYII=);
|
||||
}
|
||||
|
||||
.IconWarningEncoded
|
||||
{
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAx0lEQVR4XpWSMQ7CMAxFf4xAyBMLCxMrO8dhaBcuwdCJS3RJBw7SA/QGTCxdWJgiQYWKXJWKIXHIlyw5lqr34tQgEOdcBsCOx5yZK3hCCKdYXneQkh4pEfqzLfu+wVDSyyzFoJjfz9NB+pAF+eizx2Vruts0k15mPgvS6GYvpVtQhB61IB/dk6AF6fS4Ben0uIX5odtFe8Q/eW1KvFeH4e8khT6+gm5B+t3juyDt7n0jpe+CANTd+oTUjN/U3yVaABnSUjFz/gFq44JaVSCXeQAAAABJRU5ErkJggg==);
|
||||
}
|
||||
|
||||
.IconErrorEncoded
|
||||
{
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABQElEQVR4XqWTvUoEQRCE6wYPZUA80AfwAQz23uCMjA7MDRQEIzPBVEyNTQUFIw00vcQTTMzuAh/AxEQQT8HF/3G/oGGnEUGuoNnd6qoZuqltyKEsyzVJq5I6rnUp6SjGeGhESikzzlc1eL7opfuVbrqbU1Zw9NCgtQMaZpY0eNnaaL2fHusvTK5vKu7sjSS1Y4y3QUA6K3e3Mau5UFDyMP7tYF9o8cAHZv68vipoIJg971PZIZ5HiwdvYGGvFVFHmGmZ2MxwmQYPXubPl9Up0tfoMQGetXd6mRbvhBw+boZ6WF7Mbv1+GsHRk0fQmPAH1GfmZirbCfDJ61tw3Px8/8pZsPAG4jlVhcPgZ7adwNWBB68lkRQWFiTgFlbnLY3DGGM7izIJIyT/jjIvEJw6fdJTc6krDzh6aMwMP9bvDH4ADSsa9uSWVJkAAAAASUVORK5CYII=);
|
||||
}
|
||||
|
||||
</style></head><body><h1>
|
||||
NuGet Migration Report - EgwWPFBaseLib</h1><div id="content"><h2 _locID="OverviewTitle">Overview</h2><div class="info-text">Migration to PackageReference was completed successfully. Please build and run your solution to verify that all packages are available.</div><div class="info-text">
|
||||
If you run into any problems, have feedback, questions, or concerns, please
|
||||
<a href="https://github.com/NuGet/Home/issues/">file an issue on the NuGet GitHub repository.</a></div><div class="info-text">
|
||||
Changed files and this report have been backed up here:
|
||||
<a href="C:\EgtDev\EgwWPFBaseLib\MigrationBackup\bacdfc00\EgwWPFBaseLib">C:\EgtDev\EgwWPFBaseLib\MigrationBackup\bacdfc00\EgwWPFBaseLib</a></div><div class="info-text"><a href="https://aka.ms/nuget-pc2pr-migrator-rollback">Help me rollback to packages.config</a></div><h2 _locID="PackagesTitle">Packages processed</h2><h3 _locID="IncludePackagesTitle">Top-level dependencies:</h3><div class="issues"><table><tr><th class="issueCell">Package Id</th><th>Version</th></tr><tr><td class="issueCell"><span>Newtonsoft.Json</span></td><td><span>
|
||||
v13.0.4</span></td></tr></table></div><p /><h3 _locID="IncludePackagesTitle">Transitive dependencies:</h3><div class="issues"><table><tr><th class="issueCell">Package Id</th><th>Version</th></tr><tr><td class="issueCell">
|
||||
No transitive dependencies found.
|
||||
</td><td /></tr></table></div><h2 _locID="IssuesTitle">Package compatibility issues</h2><div class="issues"><table><tr><th /><th class="issueCell" _locID="DescriptionTableHeader">Description</th></tr><tr><td class="IconInfoEncoded" /><td class="issueCell">
|
||||
No issues were found.
|
||||
</td></tr></table></div></div></body></html>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Newtonsoft.Json" version="13.0.4" targetFramework="net472" />
|
||||
</packages>
|
||||
Reference in New Issue
Block a user