Pysar.Xaml 0.1.24

There is a newer version of this package available.
See the version list below for details.
dotnet add package Pysar.Xaml --version 0.1.24
                    
NuGet\Install-Package Pysar.Xaml -Version 0.1.24
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Pysar.Xaml" Version="0.1.24" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Pysar.Xaml" Version="0.1.24" />
                    
Directory.Packages.props
<PackageReference Include="Pysar.Xaml" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Pysar.Xaml --version 0.1.24
                    
#r "nuget: Pysar.Xaml, 0.1.24"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Pysar.Xaml@0.1.24
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Pysar.Xaml&version=0.1.24
                    
Install as a Cake Addin
#tool nuget:?package=Pysar.Xaml&version=0.1.24
                    
Install as a Cake Tool

Pysar.Xaml

Declarative report markup for Pysar, a cross-platform report engine for .NET: this package contains the runtime .rxaml loader and the code-behind source generator. It depends on the core Pysar package, which carries the element tree, data binding and the SkiaSharp rendering and PDF engine.

.rxaml is Pysar's markup dialect: an XML document that describes a report the same way the fluent builder does, using the same elements (Grid, StackPanel, Frame, Text, Image, Repeater) and the same bands. It is the better fit for a report with a fixed shape — an invoice, a statement, a certificate — because the layout stays readable as a tree instead of a chain of method calls, and it is what makes a report editable by someone who is not writing C#: a template stored in a database, or edited through the design-time preview in Rider and VS Code.

<Report xmlns="https://mriyalab.com/pysar" x:DataType="local:Invoice">
  <PageFormat Size="A4" Margin="30" />

  <ReportHeaderBand>
    <Text Content="{Binding Company.Name}" FontSize="18" FontStyle="Bold" />
  </ReportHeaderBand>

  <DetailBand DataSource="{Binding Items}">
    <DetailBand.DetailHeader>
      <Text Content="Product" FontStyle="Bold" />
    </DetailBand.DetailHeader>

    <Grid ColumnDefinitions="*, 80, 80">
      <Text Grid.Column="0" Content="{Binding Product}" />
      <Text Grid.Column="1" Content="{Binding Quantity}" />
      <Text Grid.Column="2" Content="{Binding Total, StringFormat='{0:C}'}">
        <Text.Triggers>
          <DataTrigger Binding="{Binding Total}" CompareType="GreaterThan" Value="1000">
            <Setter Member="FontColor" Value="Chocolate" />
          </DataTrigger>
        </Text.Triggers>
      </Text>
    </Grid>
  </DetailBand>
</Report>

An .rxaml report supports the same binding system as the object model: {Binding Path} against the element's data context, string formats, value converters, and DataTrigger for conditional formatting. A DataSource on DetailBand (or any Repeater) puts its children in a per-item scope over the bound collection, with an optional DetailHeader and DetailFooter that stay in the outer scope.

Loading at runtime

Reports can be loaded at runtime, which is what a template stored in a database or edited by a user needs:

using Pysar.Xaml;

var report = ReportXaml.Load("""
    <Report xmlns="https://mriyalab.com/pysar">
      <PageFormat Size="A4" Margin="30" />
      <DetailBand>
        <Text Content="Hello from XAML" />
      </DetailBand>
    </Report>
    """);

report.Build();

Code-behind source generator

For application projects, the source generator uses the standard x:Class directive to provide generated InitializeComponent(), strongly typed x:Name fields, and compiled object construction. The generator ships inside this package as an analyzer and is wired up automatically through build/Pysar.Xaml.props — no separate analyzer reference is needed. Every .rxaml file in the project is picked up automatically; set <EnableDefaultReportItems>false</EnableDefaultReportItems> to list them yourself. Resources, styles, and triggers currently use the runtime-loader fallback.

Compile-time binding validation

Any element accepts the MAUI-style directive x:DataType="local:Invoice" to declare the data-context type of a scope. The hint is design-time only — it is ignored when the report is loaded — and is inherited by child elements until another element declares its own; x:DataType="" clears it for that subtree. The source generator validates {Binding ...} paths — and DataTrigger.Binding — against the hint at build time (PQX010 error for an unknown member, PQX011 warning for a type it cannot resolve). Where the scope cannot be known, nothing is reported rather than guessed: styles and resource dictionaries are reused across scopes, so their bindings are never validated. The XAML designer idiom d:DataContext="{d:DesignInstance Type=local:Invoice}" is an accepted alternative spelling of the same hint, used when no x:DataType is present on the element.

Documentation

License

MIT — see LICENSE.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.63 43 10/1/2026
0.1.56 180 9/20/2026
0.1.53 91 9/20/2026
0.1.46 106 9/18/2026
0.1.44 101 9/16/2026
0.1.41 99 9/15/2026
0.1.38 99 9/14/2026
0.1.34 106 9/13/2026
0.1.31 104 9/11/2026
0.1.24 114 9/6/2026
0.1.10 110 8/30/2026
0.1.0 99 8/30/2026