FAQ and troubleshooting

The questions that come up in the first hour, and what the messages mean. If yours is not here, the issue tracker is the place to ask.

Text and language

Why are the menus and dialogs in German?
The built-in texts ship in German, independent of the machine's culture. Call ArionUiText.UseEnglishTexts() at start-up, plus English() on the catalogues of the Pro modules you use (GroupingUiText, PivotUiText, ChartUiText, FormattingUiText, Scene3DUiText). See Localisation.
The empty grid still says "Keine Ergebnisse".
The empty-state title is a property of each grid, not part of the text catalogue. Set EmptyStateTitle on the control or Api.State.EmptyStateTitle.
Some characters show as boxes.
The grid falls back to installed fonts for characters the requested font lacks; a machine without any font for a script shows boxes. Register a font that covers it with ArionFonts.Register. If joined scripts such as Arabic look broken, text shaping is off: the native HarfBuzz library is missing, ArionFonts.Shaping is Simple, or ARION_SHAPING=0 is set.

Rendering and the GPU

The log says [ArionUI] GPU-Lease nicht verfügbar → CPU-Fallback: …
The Avalonia host got no GPU context and draws on the CPU instead. The grid works; scrolling repaints only the newly exposed strip, so the cost follows the pixel area, not the row count. The text after the colon is the reason, also available as grid.FallbackReason; grid.ActiveRenderer is then RendererKind.Bitmap. The message is German in this version.
A 3D chart stays empty.
3D needs a GPU; there is no CPU path. Set view.Scene.FallbackText so users see a sentence instead of an empty area.
My laptop renders on the integrated GPU.
Set the environment variable ARION_GPU=high before start-up, or a part of the adapter's name such as nvidia. grid.RendererName shows which adapter really drew. See Hosting and rendering.
How do I see what the grid is doing?
Set ArionGrid.DiagnosticLog (default: the console), subscribe to RendererFailed, FrameRendered and grid.Api.DataReadFailed, and to the process-wide GridDiagnostics.Reported.

Licence and watermark

Do I need a licence key?
Not for a preview version. Every version with a prerelease suffix, such as 0.1.0-preview.1, runs every Pro module without a key and without a watermark, also in commercial software. See Pro modules.
A watermark appears in a preview build.
Something applied a key. In a preview build no key is needed, but an applied key — even a malformed or expired one — is judged by the normal rules, and a key that does not cover a module in use brings the watermark back. Remove the ArionLicense.Apply call, or check ArionLicense.State.
What happens after the preview?
Release versions will check a soft offline key; nothing phones home, and without a key the grid keeps working with a watermark. The terms are not final. A preview version you have obtained stays usable under its preview licence.

Environment switches

Three environment variables are meant for users of the library. They are read once at start-up.

VariableEffect
ARION_GPUPicks the graphics adapter: high, low, or part of the adapter's description.
ARION_GPU_SAMPLESCaps multisampling for every GPU cell, 3D views included; 0 turns it off.
ARION_SHAPING=0Forces simple text drawing (one glyph per character), whatever the application sets.

The source reads further ARION_* variables. They are switches for measuring, image tests and the showcase, not part of the library's surface, and they may change or disappear without notice.

Columns, data, editing

A column does not sort when I click its header.
It has no sort key. The typed factories set one; Column.Text needs .Sortable(key). CanUserSortColumns may also be off.
Grouping does nothing.
.WithGrouping() on a column only offers it. Install ArionUI.Grouping and call view.EnableGrouping().
Capturing a layout throws.
A column has no key. Layouts name columns by key; give every column .WithKey("…").
I changed a property and the row did not update.
The grid only knows about changes it is told about. Use an ObservableCollection with items that raise PropertyChanged (through ObservableItemsSource or ItemsSource); a plain list is read once. For a one-off change, grid.InvalidateItem(index) repaints a row.
Rows of my virtual source stay placeholders.
VirtualItemsSource raises RangeLoaded on the fetch's thread and leaves the repaint to you: call grid.InvalidateRange(first, last) on the UI thread. See Data sources.
An edit is refused without a message.
The value did not parse for a typed column, failed the mask or a validator, or the edit policy refused it. Api.Editing.SetValue and Api.Actions.SetValue return the GridEditOutcome; Api.CommandInputs.EditRefused carries the policy's reason.
Binding Actions in WPF XAML fails with MC3065.
The WPF markup compiler refuses it because the property has no CLR setter. Make that one binding in code with SetBinding(ArionGrid.ActionsProperty, …); Avalonia markup accepts it. See MVVM and binding.

Hosts and platforms

Is there a WinForms package?
Not yet. The WinForms host, ArionGridControl, builds and runs; reference src/ArionUI.Rendering.WinForms from the repository. See Install and first grid.
Does it run on macOS and Linux?
The Avalonia host targets net10.0. Development, the automated tests and the measurements so far all happen on Windows; other platforms are untested. Reports are welcome.
Can I use the grid in XAML without code?
The control yes, the columns no: columns are declared in code on a view, which a view model can expose and the XAML binds to MainView. For quick screens, Column.AutoGenerate<T>() builds columns from a type.

Reporting a problem

Issues go to GitHub. Useful to include: the host and version, RendererName and, on Avalonia, ActiveRenderer and FallbackReason, the lines from DiagnosticLog, and if it is about drawing, a frame from TryWriteFramePng.