AvaloniaILSpy
AvaloniaILSpy copied to clipboard
Upgrade Avalonia v11
NOTE: This upgrade is a work-in-progress
Feature Includes:
- Upgrade from Avalonia v0.10.x to v11.0.0
- Added EditorConfig for VS styling and basic coding standards
References
Avalonia Changes
-
AvaloniaProperty.Register<T>(..)
deprecatednotifying
argument.- https://github.com/AvaloniaUI/Avalonia/commit/4fc1995246b2e35574a95e7f7be61d27dc2cc144
- Deprected v11-preview6 https://github.com/AvaloniaUI/Avalonia/pull/10336
- https://docs.avaloniaui.net/docs/authoring-controls/defining-properties
-
Use:
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
- Reference: https://github.com/AvaloniaUI/Avalonia/issues/10088
- Deprecated:
ForegroundBrush { get; set; }
, Use method,SetForegroundBrush(...)
Pending Fixes
- [ ] CaretHighlightAdorner.cs
-
TextBlock
does not contain a definition forGetForeground
- No overload method for
RunAsync
takes 3 arguments
-
- [ ] ContextMenuEntry.cs
- ContextMenu does not contain definition for
ContextMenuOpening
- ContextMenu does not contain definition for
- [x] CopyFullyQualifiedNameContextMenuEntry.cs
-
Application
does not contain a definition forClipboard
-
- [ ] CreateListDialog.xaml.cs
- [ ] Cannot convert lambda expression to
IObserver<string>
because it is not a delegate type - [x]
Application
does not contain a definition forFocusManager
- [ ] Cannot convert lambda expression to
- [ ] CustomDialog.xaml.cs
- Cannot convert from
Avalonia.StyledElement
toAvalonia.Controls.Control
- Cannot convert from
- [ ] DecompilerTextView.xaml.cs
-
IWindowImpl
does not contain a definition forMouseDevice
-
IPointerDevice
does not contain a definition forGetPosition
-
FontManager
does not contain a definition forGetInstalledForntFamilyNames
-
FontManager
does not contain a definition forDefaultFontFamilyName
-
- [ ] Images.cs
- [ ]
AvaloniaLocator
does not contain a definition forCurrent
- Deprecated:
AvaloniaLocator.Current.GetService<T>
- Usage:
...GetService<IPlatformRenderInterface>().CreateRenderTarget(...)
- Deprecated:
- [ ]
Bitmap
does not contain definition forPlatformImpl
(x3)
- [ ]
- [ ] PlatformDependentWindow.cs
-
ITopLevelImpl.Input
is inaccessable due to its protection level -
RawKeyEventArgs
does not contain a definition forModifiers
- Ava v11 is now[PrivateApi]
andinternal
-
RawKeyEventArgs
does not contain a definition forKey
-
- [x] ResourceObjectTable.xaml.cs
-
Application
does not contain a definition forClipboard
-
- [x] ResourceStringTable.xaml.cs
-
Application
does not contain a definition forClipboard
-
- [x] SearchPane.xaml.cs
- The best overload for
Register
does not have a parameter namednotifing
-
Deprecated: AvaloniaProperty.Register<T>(..) deprecated
notifying
argument in v11.0-preview6. - Ref: https://github.com/AvaloniaUI/Avalonia/discussions/10766
- Ref: https://github.com/AvaloniaUI/Avalonia/issues/10088
-
Deprecated: AvaloniaProperty.Register<T>(..) deprecated
- The best overload for
- [x] TextMarkerService.cs
- [x] Cannot convert
AvaloniaEdit.Document.ISegment
toint
- Deprecated method overload:
TextView.Redraw(ISegment, DispatcherPriority)
-
NEW:
TextView.Redraw(ISegment)
- Deprecated method overload:
- [x] Property
VisualLineElementTextRunProperties.ForegroundBrush
cannot be assigned - It's read only.-
NEW: Use,
element.TextRunProperties.SetForegroundBrush(foregroundBrush);
-
NEW: Use,
- [x] Cannot convert
- [x] ThreadingSupport.cs
-
Application
does not contain a definition forClipboard
-
Notes
- AvaloniaLocator has been removed
- https://docs.avaloniaui.net/docs/next/stay-up-to-date/upgrade-from-0.10#locator
- https://github.com/AvaloniaUI/Avalonia/pull/11557
-
protected override ... CreateItemContainerGenerator()
- This is not overridable. Marked as obsolete
-
private protected virtual ItemContainerGenerator CreateItemContainerGenerator()
-
IItemContainerGenerator
->ItemContainerGenerator
-
ItemContainerEventArgs
has been deprecated- PR #9677
-
Commit 1101f28 - Refactored ItemContainerGenerator
-
override void OnContainerMaterialized()
has been replaced byinternal override void PrepareContainerForItemOverride(...)
-
-
MainWindow.HandleWindowStateChanged
has been deprecated in v11- NOTE: Undocumented
- https://github.com/AvaloniaUI/Avalonia/discussions/11593
- Use
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
Stretch TO-DO
- Rename
.xaml
to.axaml
Overview of Changes Made
-
IBitmap
->Bitmap
-
FocusManager
-
WbFb : IFramebufferPlatformSurface
now implementsCreateFramebufferRenderTarget()
- https://github.com/AvaloniaUI/Avalonia/pull/11914
Focus Manager
OpenListDialog.xaml.cs
// Avalonia v0.10
//// TemplateApplied += (sender, e) => Application.Current.FocusManager.Focus(listView);
TemplateApplied += (sender, e) => {
// Avalonia v11
var focusManager = TopLevel.GetTopLevel(listView).FocusManager;
focusManager.GetFocusedElement().Focus();
};
Clipboard
// v0.10
App.Current.Clipboard.SetTextAsync(sb.ToString());
// v11.0 - TopLevel
var clipboard = TopLevel.GetTopLevel(this)?.Clipboard;
clipboard.SetTextAsync(sb.ToString());
// v11.0 - Main Window
var clipboard = App.Current.GetMainWindow()?.Clipboard;
clipboard.SetTextAsync(member.ReflectionName);
Avalonia-v11-Update.md - please add that to the description of the PR but remove the file
Please rebase on latest master - because then the build automation fixes I made will kick in.
Wonderful, thanks for the heads up on both areas @christophwille. This upgrade isn't as smooth as I'd like it to be, but it was expected considering there are a lot of breaking changes moving to v11.
I'm trying to keep tabs on the undocumented Avalonia v11 upgrade areas and making updates for their docs as well.
Really appreciate you providing feedback to the Avalonia project!
How are things going? How bad is it?
Hi @christophwille, though it's not as straightforward as I'd like it to be, it is going well.
The biggest part of the slow turnaround comes down to time prioritization during the summer months. It's the usual adult life items: open-source projects, fixing my house, working on a new startup, rewind-repeat.
I didn't forget about this repo. Daytime job got very busy as we're aiming to deliver a lot in Q3. I aim to see this completed and will wrap this upgrade up as time allows.
How does it look like on your end - got a little time to chip away at this?
Thanks Chris for the tap on the shoulder, things got super busy at work over the past few months (got to love layoff/fire season).
I'll get back on track for you sir with Christmas vacation time coming up soon
Decided to try to get this to build and run, and surprisingly, I did get it to run in some capacity. The decompiler output isn't displaying anything, and frankly, more things are broken than working (including some outright commented out bits), but I hope I got at least some things right - the treeview appears to be functioning correctly!
Screenshot
I put up the changes on https://github.com/KubeRoot/AvaloniaILSpy/tree/UpgradeAvalonia11-WIP, but I didn't care much for code quality with this, so not sure how much of this is usable. If I figure out more details, I might make a PR to your repository, if you don't mind.
EDIT: Small update, figured out the errors I've made with some things. Code is now rendering, the menu and toolbar are populated, font selection is working. I might try to figure out how theming should work, but I can see a few big issues that I don't know how to tackle, like generating the icons and PlatformDependentWindow
@DamianSuess @KubeRoot @christophwille please let me know if you need any help with this upgrade.
Although, I am wondering if it might be better to recreate this project from latest WPF-version sources.
@maxkatz6 please coordinate the porting / adaptation work with @DamianSuess (I don't know about his plans or available time)