- aggiunto componente EgwDataGrid

- migrato a packages.config
This commit is contained in:
Emmanuele Sassi
2025-10-23 16:25:23 +02:00
parent 4171028eff
commit 6aa70f7472
7 changed files with 940 additions and 0 deletions
+151
View File
@@ -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
+476
View File
@@ -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
+2
View File
@@ -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>
+13
View File
@@ -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>