diff --git a/EgwWPFBaseLib/EgwDataGrid/ColumnLayout.vb b/EgwWPFBaseLib/EgwDataGrid/ColumnLayout.vb new file mode 100644 index 0000000..9897794 --- /dev/null +++ b/EgwWPFBaseLib/EgwDataGrid/ColumnLayout.vb @@ -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( Optional propName As String = Nothing) + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) + End Sub + +End Class diff --git a/EgwWPFBaseLib/EgwDataGrid/EgwDataGrid.vb b/EgwWPFBaseLib/EgwDataGrid/EgwDataGrid.vb new file mode 100644 index 0000000..23b7dd7 --- /dev/null +++ b/EgwWPFBaseLib/EgwDataGrid/EgwDataGrid.vb @@ -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. +' +' +' + +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 \ No newline at end of file diff --git a/EgwWPFBaseLib/EgwWPFBaseLib.vbproj b/EgwWPFBaseLib/EgwWPFBaseLib.vbproj index 4fb1f31..264c241 100644 --- a/EgwWPFBaseLib/EgwWPFBaseLib.vbproj +++ b/EgwWPFBaseLib/EgwWPFBaseLib.vbproj @@ -87,6 +87,8 @@ + + Code diff --git a/EgwWPFBaseLib/Themes/Generic.xaml b/EgwWPFBaseLib/Themes/Generic.xaml index ac65a8b..e786bba 100644 --- a/EgwWPFBaseLib/Themes/Generic.xaml +++ b/EgwWPFBaseLib/Themes/Generic.xaml @@ -54,4 +54,17 @@ + + diff --git a/MigrationBackup/bacdfc00/EgwWPFBaseLib/EgwWPFBaseLib.vbproj b/MigrationBackup/bacdfc00/EgwWPFBaseLib/EgwWPFBaseLib.vbproj new file mode 100644 index 0000000..313ed8e --- /dev/null +++ b/MigrationBackup/bacdfc00/EgwWPFBaseLib/EgwWPFBaseLib.vbproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + EgwWPFBaseLib + EgwWPFBaseLib + Library + v4.7.2 + Custom + true + {A80C1830-5DB1-419E-AD0C-BA91BE5BF5A9} + + + true + full + true + true + true + bin\Debug\ + EgwWPFBaseLib.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + pdbonly + false + false + true + false + true + bin\Release\ + EgwWPFBaseLib.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + On + + + Binary + + + Off + + + On + + + + ..\packages\Newtonsoft.Json.13.0.4\lib\net45\Newtonsoft.Json.dll + + + + + + + + + 4.0 + + + + + + + + + MSBuild:Compile + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + + + copy $(TargetPath) c:\EgtProg\Effector\EgwWPFBaseLib.dll + + \ No newline at end of file diff --git a/MigrationBackup/bacdfc00/EgwWPFBaseLib/NuGetUpgradeLog.html b/MigrationBackup/bacdfc00/EgwWPFBaseLib/NuGetUpgradeLog.html new file mode 100644 index 0000000..d9e18f0 --- /dev/null +++ b/MigrationBackup/bacdfc00/EgwWPFBaseLib/NuGetUpgradeLog.html @@ -0,0 +1,162 @@ + + + + + NuGetMigrationLog +

+ NuGet Migration Report - EgwWPFBaseLib

Overview

Migration to PackageReference was completed successfully. Please build and run your solution to verify that all packages are available.
+ If you run into any problems, have feedback, questions, or concerns, please + file an issue on the NuGet GitHub repository.
+ Changed files and this report have been backed up here: + C:\EgtDev\EgwWPFBaseLib\MigrationBackup\bacdfc00\EgwWPFBaseLib

Packages processed

Top-level dependencies:

Package IdVersion
Newtonsoft.Json + v13.0.4

Transitive dependencies:

Package IdVersion
+ No transitive dependencies found. +

Package compatibility issues

Description
+ No issues were found. +
\ No newline at end of file diff --git a/MigrationBackup/bacdfc00/EgwWPFBaseLib/packages.config b/MigrationBackup/bacdfc00/EgwWPFBaseLib/packages.config new file mode 100644 index 0000000..4b1297f --- /dev/null +++ b/MigrationBackup/bacdfc00/EgwWPFBaseLib/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file