RelativeControl.Avalonia
11.3.3
RelativeControl.Avalonia 11.3.4
Additional DetailsThis version does not specify an upper bound for its Avalonia dependency, which may lead to compatibility issues.
See the version list below for details.
dotnet add package RelativeControl.Avalonia --version 11.3.3
NuGet\Install-Package RelativeControl.Avalonia -Version 11.3.3
<PackageReference Include="RelativeControl.Avalonia" Version="11.3.3" />
<PackageVersion Include="RelativeControl.Avalonia" Version="11.3.3" />
<PackageReference Include="RelativeControl.Avalonia" />
paket add RelativeControl.Avalonia --version 11.3.3
#r "nuget: RelativeControl.Avalonia, 11.3.3"
#:package RelativeControl.Avalonia@11.3.3
#addin nuget:?package=RelativeControl.Avalonia&version=11.3.3
#tool nuget:?package=RelativeControl.Avalonia&version=11.3.3
RelativeControl.Avalonia
This provides some relative units and features for Avalonia.
New Features in 1.3.x
- Now support using relatives in style setters.
<Style Selector="Button">
<Setter Property="r:Relative.Width" Value="20pw"/>
</Style>
- Now you can use a visual anchor to provide relative feature for objects which is non-visual but have layout properties.
Get Started
Add NuGet package:
dotnet add package RelativeControl.Avalonia
Set a property whose value is double
<CONTROL r:Relative.Width="20pw"/>
This will set the
CONTROL's width to 20% of its logical parent's width.You can also add / subtract the values:
<CONTROL r:Relative.Width="20pw+10ph"/>This will set the
CONTROL's width to :20% logical parent width + 10% logical parent height.
You can also add / subtract / multiply / divide the value at code behind.
- Multiply() and Divide() will affect the instance and all its references.
- * or / operation will create a light copy and will not affect the instance.
Relative.SetOneTimeWidthandRelative.SetOneTimeHeightwill update only once when the control is attached to visual tree.
Other properties using RelativeLength / RelativeLengthMerge:
- Relative.Height
- Relative.MinWidth
- Relative.MinHeight
- Relative.MaxWidth
- Relative.MaxHeight
- Relative.SetOneTimeWidth
- Relative.SetOneTimeHeight
Set a property whose value is CornerRadius
<CONTROL r:Relative.CornerRadius="10sw 10sw+5sh 10sh-5sw 10sh"/>
This will set the
CONTROL'sCornerRadiusto:TopLeft = 10% width,
TopRight = 10% width + 5% height,
BottomRight = 10% height - 5% width,
BottomLeft = 10% height
Set a property whose value is Thickness
<CONTROL r:Relative.BorderThickness="1em 2em-5px"/>
This will set the
CONTROL's BorderThickness to:Horizontal(Left,Right) = 1x FontSize,
Vertical(Top,Bottom) = 2x FontSize - 5px
Other properties using RelativeThickness:
- Relative.Margin
- Relative.Padding
Bind any property
<CONTROL PROPERTY="{r:RelativeBinding {Binding SOURCE_PROPERTY},50%}"/>
This will set the
PROPERTY's value to 50% ofSOURCE_PROPERTY's value.A valid
SourceProperty's value must be:
- a double
- any value that can convert to double (like a number string)
- any custom structs or classes that inherits
IMulDiv<RelativeScale>orIMulDiv<double>.
RelativeBindOneTimewill update only once when the control is attached to visual tree.
Use Relatives in your custom property:
StyledProperty:
public static readonly StyledProperty<IRelative<T>> XXXProperty =
AvaloniaProperty.Register<..., IRelative<T>>(nameof(XXX));
DirectProperty:
public static readonly DirectProperty<..., IRelative<T>> XXXProperty =
AvaloniaProperty.RegisterDirect<..., IRelative<T>>(...);
AttachedProperty:
public static readonly AttachedProperty<IRelative<T>> XXXProperty =
AvaloniaProperty.RegisterAttached<...,...,IRelative<T>>(...);
Units
Absolute Units:
px: Device-independent Pixel(1/96th of an inch)
cm: Centimeter
mm: Millimeter
in: Inch
Relative Units:
tpw: TemplatedParent's width
tph: TemplatedParent's height
lpw or pw: LogicalParent's width
lph or ph: LogicalParent's height
vpw: VisualParent's width
vph: VisualParent's height
sw: The control itself's width
sh: The control itself's height
em: The control's FontSize
vw: Window's width
vh: Window's height
%: Represents percentage. Only used for custom bindings.
Minimum Available Version of an API
0.0.5
- Width
- Height
- MinWidth
- MinHeight
- MaxWidth
- MaxHeight
- BorderThickness
- CornerRadius
0.1.0
- Margin
- Padding
1.0.0-alpha
- RelativeBinding
You can bind any property! How to bind a custom property?
1.0.0-beta
- SetOneTimeWidth
- SetOneTimeHeight
- RelativeBindOneTime
These will update only once when the control is attached to visual tree!
Breaking Changes
0.2.1:
Relative units are using percentages (Excepts em). To make it more like css.
- <Button r:Relative.Width="0.5vw"/>
+ <Button r:Relative.Width="50vw"/>
1.0.0-alpha:
Move all relative length from Units.cs to RelativeLength.cs
RelativeLength.cs:
+ public abstract class RelativeLengthBase
- RelativeLength.RelativeLengthChanged (Rename)
+ RelativeLengthBase.RelativeLengthChanged
- RelativeLengthBase.OnRelativeLengthChanged (Rename)
+ RelativeLengthBase.RelativeLengthChanged
- RelativeMerge.Multiplier (Rename)
+ RelativeLengthCollection.Scaler
- SetTarget
RelativeThickness.cs:
- RelativeThicknessChanged (Rename)
+ RelativeThicknessChangedHandler
- OnRelativeThicknessChanged (Rename)
+ RelativeThicknessChanged
- SetTarget
RelativeSize.cs:
- RelativeSizeChanged (Rename)
+ RelativeSizeChangedHandler
- OnRelativeSizeChanged (Rename)
+ RelativeSizeChanged
- SetTarget
RelativeCornerRadius.cs:
- RelativeCornerRadiusChanged (Rename)
+ RelativeCornerRadiusChangedHandler
- OnRelativeCornerRadiusChanged (Rename)
+ RelativeCornerRadiusChanged
- SetTarget
1.0.0-beta:
- public event RelativeXXXChanged(T oldValue,T newValue);
+ public event RelativeChanged<T>(IRelative<T> sender,RelativeChangedEventArgs<T> args);
+ public class RelativeChangedEventArgs<T>(T oldValue, T newValue) : RelativeChangedEventArgs {
+ public readonly T OldValue = oldValue;
+ public readonly T NewValue = newValue;
+ }
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net8.0-windows7.0 is compatible. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net9.0-windows7.0 is compatible. 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. |
NuGet packages (1)
Showing the top 1 NuGet packages that depend on RelativeControl.Avalonia:
| Package | Downloads |
|---|---|
|
RelativeControl.Avalonia.DataGrid
Enable Relative Units and Features for Avalonia DataGrid |
GitHub repositories
This package is not used by any popular GitHub repositories.