diff --git a/Pilz.UI.AvaloniaUI.Symbols/Pilz.UI.AvaloniaUI.Symbols.csproj b/Pilz.UI.AvaloniaUI.Symbols/Pilz.UI.AvaloniaUI.Symbols.csproj
index a1b72cf..3b0fb9e 100644
--- a/Pilz.UI.AvaloniaUI.Symbols/Pilz.UI.AvaloniaUI.Symbols.csproj
+++ b/Pilz.UI.AvaloniaUI.Symbols/Pilz.UI.AvaloniaUI.Symbols.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml b/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml
new file mode 100644
index 0000000..88cbb61
--- /dev/null
+++ b/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml
@@ -0,0 +1,25 @@
+
diff --git a/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml.cs b/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml.cs
new file mode 100644
index 0000000..a367da3
--- /dev/null
+++ b/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml.cs
@@ -0,0 +1,55 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Media;
+
+namespace Pilz.UI.AvaloniaUI.Controls;
+
+public partial class ImageButton : Button
+{
+ protected override Type StyleKeyOverride => typeof(Button);
+
+ public ImageButton()
+ {
+ InitializeComponent();
+ }
+
+ public string? Text
+ {
+ get => ButtonText.Text;
+ set => ButtonText.Text = value;
+ }
+
+ public IImage? ImageSource
+ {
+ get => ButtonImage.Source;
+ set => ButtonImage.Source = value;
+ }
+
+ public double ImageWidth
+ {
+ get => ButtonImage.Width;
+ set => ButtonImage.Width = value;
+ }
+
+ public double ImageHeight
+ {
+ get => ButtonImage.Height;
+ set => ButtonImage.Height = value;
+ }
+
+ public double ImageQuadSize
+ {
+ get => ButtonImage.Width;
+ set => ButtonImage.Width = ButtonImage.Height = value;
+ }
+
+ public Size ImageSize
+ {
+ get => new(ButtonImage.Width, ButtonImage.Height);
+ set
+ {
+ ButtonImage.Width = value.Width;
+ ButtonImage.Height = value.Height;
+ }
+ }
+}
diff --git a/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml b/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml
new file mode 100644
index 0000000..49e8839
--- /dev/null
+++ b/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml.cs b/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml.cs
new file mode 100644
index 0000000..9517de2
--- /dev/null
+++ b/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml.cs
@@ -0,0 +1,55 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Media;
+
+namespace Pilz.UI.AvaloniaUI.Controls;
+
+public partial class ImageSplitButton : SplitButton
+{
+ protected override Type StyleKeyOverride => typeof(SplitButton);
+
+ public ImageSplitButton()
+ {
+ InitializeComponent();
+ }
+
+ public string? Text
+ {
+ get => ButtonText.Text;
+ set => ButtonText.Text = value;
+ }
+
+ public IImage? ImageSource
+ {
+ get => ButtonImage.Source;
+ set => ButtonImage.Source = value;
+ }
+
+ public double ImageWidth
+ {
+ get => ButtonImage.Width;
+ set => ButtonImage.Width = value;
+ }
+
+ public double ImageHeight
+ {
+ get => ButtonImage.Height;
+ set => ButtonImage.Height = value;
+ }
+
+ public double ImageQuadSize
+ {
+ get => ButtonImage.Width;
+ set => ButtonImage.Width = ButtonImage.Height = value;
+ }
+
+ public Size ImageSize
+ {
+ get => new(ButtonImage.Width, ButtonImage.Height);
+ set
+ {
+ ButtonImage.Width = value.Width;
+ ButtonImage.Height = value.Height;
+ }
+ }
+}
diff --git a/Pilz.UI.AvaloniaUI/Controls/_XmlnsDefinitions.cs b/Pilz.UI.AvaloniaUI/Controls/_XmlnsDefinitions.cs
new file mode 100644
index 0000000..cf3edc9
--- /dev/null
+++ b/Pilz.UI.AvaloniaUI/Controls/_XmlnsDefinitions.cs
@@ -0,0 +1,3 @@
+using Avalonia.Metadata;
+
+[assembly: XmlnsDefinition("https://git.pilzinsel64.de/pilz-framework/pilz", "Pilz.UI.AvaloniaUI.Controls")]
\ No newline at end of file
diff --git a/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj b/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj
index 59bba67..074c624 100644
--- a/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj
+++ b/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj
@@ -7,10 +7,11 @@
- 1.0.0
+ 1.1.3
+
@@ -18,4 +19,10 @@
+
+
+ ImageSplitButton.axaml
+
+
+
diff --git a/Pilz.UI.AvaloniaUI/Symbols/ISymbolFactory.cs b/Pilz.UI.AvaloniaUI/Symbols/ISymbolFactory.cs
index ab9a2b5..62f3ae9 100644
--- a/Pilz.UI.AvaloniaUI/Symbols/ISymbolFactory.cs
+++ b/Pilz.UI.AvaloniaUI/Symbols/ISymbolFactory.cs
@@ -1,4 +1,5 @@
-using Avalonia.Media;
+using Avalonia.Controls;
+using Avalonia.Media;
using Pilz.UI.Symbols;
namespace Pilz.UI.AvaloniaUI.Symbols;
@@ -6,5 +7,9 @@ namespace Pilz.UI.AvaloniaUI.Symbols;
public interface ISymbolFactory : IBaseSymbolFactory
{
IImage? GetImageSource(TSymbols image);
+ Image? GetImage(TSymbols image, double width, double height);
+ Image? GetImage(TSymbols image, Avalonia.Size size);
+ Image? GetImage(TSymbols image, System.Drawing.Size size);
+ Image? GetImage(TSymbols image, SymbolSize size);
ISymbolProxy GetImage(TSymbols image);
}
\ No newline at end of file
diff --git a/Pilz.UI.AvaloniaUI/Symbols/ISymbolProxy.cs b/Pilz.UI.AvaloniaUI/Symbols/ISymbolProxy.cs
index b5b6b73..eb0baec 100644
--- a/Pilz.UI.AvaloniaUI/Symbols/ISymbolProxy.cs
+++ b/Pilz.UI.AvaloniaUI/Symbols/ISymbolProxy.cs
@@ -1,8 +1,14 @@
-using Avalonia.Media;
+using Avalonia.Controls;
+using Avalonia.Media;
+using Pilz.UI.Symbols;
namespace Pilz.UI.AvaloniaUI.Symbols;
public interface ISymbolProxy
{
IImage? GetImageSource();
+ Image? GetImage(double width, double height);
+ Image? GetImage(Avalonia.Size size);
+ Image? GetImage(System.Drawing.Size size);
+ Image? GetImage(SymbolSize size);
}
diff --git a/Pilz.UI.AvaloniaUI/Symbols/SymbolFactory.cs b/Pilz.UI.AvaloniaUI/Symbols/SymbolFactory.cs
index 5b06243..28cd111 100644
--- a/Pilz.UI.AvaloniaUI/Symbols/SymbolFactory.cs
+++ b/Pilz.UI.AvaloniaUI/Symbols/SymbolFactory.cs
@@ -1,4 +1,5 @@
-using Avalonia.Media;
+using Avalonia.Controls;
+using Avalonia.Media;
using Avalonia.Svg;
using Pilz.UI.Symbols;
@@ -19,6 +20,31 @@ public abstract class SymbolFactory : BaseSymbolFactory, ISy
};
}
+ public Image? GetImage(TSymbols image, double width, double height)
+ {
+ return new Image
+ {
+ Source = GetImageSource(image),
+ Width = width,
+ Height = height,
+ };
+ }
+
+ public Image? GetImage(TSymbols image, Avalonia.Size size)
+ {
+ return GetImage(image, size.Width, size.Height);
+ }
+
+ public Image? GetImage(TSymbols image, System.Drawing.Size size)
+ {
+ return GetImage(image, size.Width, size.Height);
+ }
+
+ public Image? GetImage(TSymbols image, SymbolSize size)
+ {
+ return GetImage(image, ResolveCommonSize(size));
+ }
+
public ISymbolProxy GetImage(TSymbols image)
{
return new SymbolProxy(this, image);
diff --git a/Pilz.UI.AvaloniaUI/Symbols/SymbolProxy.cs b/Pilz.UI.AvaloniaUI/Symbols/SymbolProxy.cs
index 7f822f1..0cba3e6 100644
--- a/Pilz.UI.AvaloniaUI/Symbols/SymbolProxy.cs
+++ b/Pilz.UI.AvaloniaUI/Symbols/SymbolProxy.cs
@@ -1,4 +1,6 @@
-using Avalonia.Media;
+using Avalonia.Controls;
+using Avalonia.Media;
+using Pilz.UI.Symbols;
namespace Pilz.UI.AvaloniaUI.Symbols;
@@ -8,4 +10,24 @@ public class SymbolProxy(SymbolFactory factory, TSymbols ima
{
return factory.GetImageSource(image);
}
+
+ public Image? GetImage(double width, double height)
+ {
+ return factory.GetImage(image, width, height);
+ }
+
+ public Image? GetImage(Avalonia.Size size)
+ {
+ return factory.GetImage(image, size);
+ }
+
+ public Image? GetImage(System.Drawing.Size size)
+ {
+ return factory.GetImage(image, size);
+ }
+
+ public Image? GetImage(SymbolSize size)
+ {
+ return factory.GetImage(image, size);
+ }
}