Browse Source

Made translator generic

Krzysztof Krysiński 2 years ago
parent
commit
022827e82e
43 changed files with 424 additions and 311 deletions
  1. 6 0
      src/PixiEditor.Extensions/PixiEditor.Extensions.csproj
  2. 38 0
      src/PixiEditor.Extensions/UI/ExternalProperty.cs
  3. 0 0
      src/PixiEditor.Extensions/UI/ICustomTranslatorElement.cs
  4. 18 15
      src/PixiEditor.Extensions/UI/Translator.cs
  5. 1 0
      src/PixiEditor/Models/AppExtensions/ExtensionLoader.cs
  6. 1 0
      src/PixiEditor/ViewModels/SubViewModels/Tools/ToolSettings/Settings/EnumSetting.cs
  7. 14 13
      src/PixiEditor/Views/Dialogs/AboutPopup.xaml
  8. 2 1
      src/PixiEditor/Views/Dialogs/BasicPopup.xaml
  9. 5 4
      src/PixiEditor/Views/Dialogs/ConfirmationPopup.xaml
  10. 2 1
      src/PixiEditor/Views/Dialogs/DebugDialogs/CommandDebugPopup.xaml
  11. 14 13
      src/PixiEditor/Views/Dialogs/DebugDialogs/Localization/LocalizationDebugWindow.xaml
  12. 2 1
      src/PixiEditor/Views/Dialogs/DialogTitleBar.xaml
  13. 12 1
      src/PixiEditor/Views/Dialogs/DialogTitleBar.xaml.cs
  14. 3 2
      src/PixiEditor/Views/Dialogs/ExportFilePopup.xaml
  15. 11 10
      src/PixiEditor/Views/Dialogs/HelloTherePopup.xaml
  16. 2 1
      src/PixiEditor/Views/Dialogs/ImportFilePopup.xaml
  17. 2 1
      src/PixiEditor/Views/Dialogs/ImportShortcutTemplatePopup.xaml
  18. 3 2
      src/PixiEditor/Views/Dialogs/NewFilePopup.xaml
  19. 3 2
      src/PixiEditor/Views/Dialogs/NoticePopup.xaml
  20. 2 1
      src/PixiEditor/Views/Dialogs/OptionsPopup.xaml
  21. 22 21
      src/PixiEditor/Views/Dialogs/PalettesBrowser.xaml
  22. 4 3
      src/PixiEditor/Views/Dialogs/ResizeCanvasPopup.xaml
  23. 3 2
      src/PixiEditor/Views/Dialogs/ResizeDocumentPopup.xaml
  24. 3 2
      src/PixiEditor/Views/Dialogs/SettingGroups/ShortcutsBinder.xaml
  25. 29 28
      src/PixiEditor/Views/Dialogs/SettingsWindow.xaml
  26. 5 4
      src/PixiEditor/Views/Dialogs/ShortcutPopup.xaml
  27. 105 104
      src/PixiEditor/Views/MainWindow.xaml
  28. 15 0
      src/PixiEditor/Views/MainWindow.xaml.cs
  29. 10 9
      src/PixiEditor/Views/UserControls/AnchorPointPicker.xaml
  30. 1 0
      src/PixiEditor/Views/UserControls/BlendModeComboBox.cs
  31. 12 11
      src/PixiEditor/Views/UserControls/Layers/FolderControl.xaml
  32. 15 14
      src/PixiEditor/Views/UserControls/Layers/LayerControl.xaml
  33. 7 6
      src/PixiEditor/Views/UserControls/Layers/LayersManager.xaml
  34. 5 4
      src/PixiEditor/Views/UserControls/Layers/ReferenceLayer.xaml
  35. 4 3
      src/PixiEditor/Views/UserControls/Palettes/ColorReplacer.xaml
  36. 2 1
      src/PixiEditor/Views/UserControls/Palettes/CompactPaletteViewer.xaml
  37. 3 2
      src/PixiEditor/Views/UserControls/Palettes/PaletteColorAdder.xaml
  38. 5 4
      src/PixiEditor/Views/UserControls/Palettes/PaletteItem.xaml
  39. 10 9
      src/PixiEditor/Views/UserControls/Palettes/PaletteViewer.xaml
  40. 2 1
      src/PixiEditor/Views/UserControls/SizeInput.xaml
  41. 6 5
      src/PixiEditor/Views/UserControls/SizePicker.xaml
  42. 8 7
      src/PixiEditor/Views/UserControls/Viewport.xaml
  43. 7 3
      src/SampleExtension/SampleExtension.cs

+ 6 - 0
src/PixiEditor.Extensions/PixiEditor.Extensions.csproj

@@ -5,6 +5,12 @@
         <ImplicitUsings>enable</ImplicitUsings>
         <ImplicitUsings>enable</ImplicitUsings>
         <Nullable>enable</Nullable>
         <Nullable>enable</Nullable>
       <UseWPF>true</UseWPF>
       <UseWPF>true</UseWPF>
+      <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
+      <Version>0.0.1</Version>
+      <Title>PixiEditor Extensions</Title>
+      <Authors>PixiEditor Organization</Authors>
+      <Copyright>PixiEditor Organization</Copyright>
+      <Description>Package for creating custom extensions for pixel art editor PixiEditor</Description>
     </PropertyGroup>
     </PropertyGroup>
 
 
     <ItemGroup>
     <ItemGroup>

+ 38 - 0
src/PixiEditor.Extensions/UI/ExternalProperty.cs

@@ -0,0 +1,38 @@
+using System.Windows;
+using System.Windows.Data;
+using PixiEditor.Extensions.Common.Localization;
+
+namespace PixiEditor.Views;
+
+public abstract class ExternalProperty
+{
+    public Type PropertyType { get; set; }
+
+    public Action<DependencyObject, Binding>? SetTranslationBinding { get; set; }
+    public Action<DependencyObject, LocalizedString>? SetTranslation { get; set; }
+
+    public ExternalProperty(Type propertyType, Action<DependencyObject, Binding> setTranslationBinding)
+    {
+        PropertyType = propertyType;
+        SetTranslationBinding = setTranslationBinding;
+    }
+
+    public ExternalProperty(Type propertyType, Action<DependencyObject, LocalizedString> translationAction)
+    {
+        PropertyType = propertyType;
+        SetTranslation = translationAction;
+    }
+}
+
+public class ExternalProperty<T> : ExternalProperty
+{
+    public ExternalProperty(Action<DependencyObject, Binding> setTranslationBinding) : base(typeof(T), setTranslationBinding)
+    {
+    }
+
+    public ExternalProperty(Action<DependencyObject, LocalizedString> translationAction) : base(typeof(T), translationAction)
+    {
+    }
+}
+
+

+ 0 - 0
src/PixiEditor/Views/ICustomTranslatorElement.cs → src/PixiEditor.Extensions/UI/ICustomTranslatorElement.cs


+ 18 - 15
src/PixiEditor/Views/Translator.cs → src/PixiEditor.Extensions/UI/Translator.cs

@@ -2,15 +2,15 @@
 using System.Windows.Controls;
 using System.Windows.Controls;
 using System.Windows.Data;
 using System.Windows.Data;
 using System.Windows.Documents;
 using System.Windows.Documents;
-using AvalonDock.Layout;
 using PixiEditor.Extensions.Common.Localization;
 using PixiEditor.Extensions.Common.Localization;
-using PixiEditor.Models.Localization;
-using PixiEditor.Views.Dialogs;
+using PixiEditor.Views;
 
 
-namespace PixiEditor.Views;
+namespace PixiEditor.Extensions.UI;
 
 
 public class Translator : UIElement
 public class Translator : UIElement
 {
 {
+    public static List<ExternalProperty> ExternalProperties { get; } = new();
+
     public static readonly DependencyProperty KeyProperty = DependencyProperty.RegisterAttached(
     public static readonly DependencyProperty KeyProperty = DependencyProperty.RegisterAttached(
         "Key",
         "Key",
         typeof(string),
         typeof(string),
@@ -124,10 +124,23 @@ public class Translator : UIElement
             RelativeSource = new RelativeSource(RelativeSourceMode.Self)
             RelativeSource = new RelativeSource(RelativeSourceMode.Self)
         };
         };
 
 
+        ExternalProperty externalProperty = ExternalProperties.FirstOrDefault(x => x.PropertyType.IsAssignableFrom(d.GetType()));
+
         if (d is ICustomTranslatorElement customTranslatorElement)
         if (d is ICustomTranslatorElement customTranslatorElement)
         {
         {
             customTranslatorElement.SetTranslationBinding(customTranslatorElement.GetDependencyProperty(), binding);
             customTranslatorElement.SetTranslationBinding(customTranslatorElement.GetDependencyProperty(), binding);
         }
         }
+        else if (externalProperty != null)
+        {
+            if (externalProperty.SetTranslationBinding != null)
+            {
+                externalProperty.SetTranslationBinding(d, binding);
+            }
+            else
+            {
+                externalProperty.SetTranslation(d, localizedString);
+            }
+        }
         else if (d is TextBox textBox)
         else if (d is TextBox textBox)
         {
         {
             textBox.SetBinding(TextBox.TextProperty, binding);
             textBox.SetBinding(TextBox.TextProperty, binding);
@@ -144,12 +157,6 @@ public class Translator : UIElement
         {
         {
             window.SetBinding(Window.TitleProperty, binding);
             window.SetBinding(Window.TitleProperty, binding);
         }
         }
-        #if DEBUG
-        else if (d is DialogTitleBar)
-        {
-            throw new ArgumentException($"Use {nameof(DialogTitleBar)}.{nameof(DialogTitleBar.TitleKey)} to set the localization key for the title");
-        }
-        #endif
         else if (d is ContentControl contentControl)
         else if (d is ContentControl contentControl)
         {
         {
             contentControl.SetBinding(ContentControl.ContentProperty, binding);
             contentControl.SetBinding(ContentControl.ContentProperty, binding);
@@ -158,11 +165,7 @@ public class Translator : UIElement
         {
         {
             menuItem.SetBinding(HeaderedItemsControl.HeaderProperty, binding);
             menuItem.SetBinding(HeaderedItemsControl.HeaderProperty, binding);
         }
         }
-        else if (d is LayoutContent layoutContent)
-        {
-            layoutContent.SetValue(LayoutContent.TitleProperty, localizedString.Value);
-        }
-        #if DEBUG
+#if DEBUG
         else
         else
         {
         {
             throw new ArgumentException($"'{d.GetType().Name}' does not support {nameof(Translator)}.Key");
             throw new ArgumentException($"'{d.GetType().Name}' does not support {nameof(Translator)}.Key");

+ 1 - 0
src/PixiEditor/Models/AppExtensions/ExtensionLoader.cs

@@ -1,6 +1,7 @@
 using System.IO;
 using System.IO;
 using System.Reflection;
 using System.Reflection;
 using System.Windows;
 using System.Windows;
+using AvalonDock.Layout;
 using Newtonsoft.Json;
 using Newtonsoft.Json;
 using PixiEditor.Extensions;
 using PixiEditor.Extensions;
 using PixiEditor.Extensions.Common.Localization;
 using PixiEditor.Extensions.Common.Localization;

+ 1 - 0
src/PixiEditor/ViewModels/SubViewModels/Tools/ToolSettings/Settings/EnumSetting.cs

@@ -2,6 +2,7 @@
 using System.Windows.Controls;
 using System.Windows.Controls;
 using System.Windows.Controls.Primitives;
 using System.Windows.Controls.Primitives;
 using System.Windows.Data;
 using System.Windows.Data;
+using PixiEditor.Extensions.UI;
 using PixiEditor.Helpers.Extensions;
 using PixiEditor.Helpers.Extensions;
 using PixiEditor.Views;
 using PixiEditor.Views;
 
 

+ 14 - 13
src/PixiEditor/Views/Dialogs/AboutPopup.xaml

@@ -10,8 +10,9 @@
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d" WindowStyle="None"
         mc:Ignorable="d" WindowStyle="None"
-        views:Translator.Key="ABOUT"
+        ui:Translator.Key="ABOUT"
         WindowStartupLocation="CenterScreen"
         WindowStartupLocation="CenterScreen"
         Height="510" Width="400" Name="aboutPopup" MinWidth="100" MinHeight="100"
         Height="510" Width="400" Name="aboutPopup" MinWidth="100" MinHeight="100"
         FlowDirection="{helpers:Localization FlowDirection}">
         FlowDirection="{helpers:Localization FlowDirection}">
@@ -38,8 +39,8 @@
                 <Image Source="../../Images/PixiEditorLogo.png" Height="40" VerticalAlignment="Center"/>
                 <Image Source="../../Images/PixiEditorLogo.png" Height="40" VerticalAlignment="Center"/>
                 <TextBlock FontSize="40" FontWeight="SemiBold" Foreground="White" VerticalAlignment="Center" Margin="10,0,0,0">PixiEditor</TextBlock>
                 <TextBlock FontSize="40" FontWeight="SemiBold" Foreground="White" VerticalAlignment="Center" Margin="10,0,0,0">PixiEditor</TextBlock>
             </StackPanel>
             </StackPanel>
-            <TextBlock Foreground="White" HorizontalAlignment="Center" FontSize="20" FontWeight="Medium" views:Translator.LocalizedString="{Binding VersionText}"/>
-            <Label views:Translator.Key="PROJECT_MAINTAINERS" Style="{StaticResource Header2}" Margin="10 20 0 5"/>
+            <TextBlock Foreground="White" HorizontalAlignment="Center" FontSize="20" FontWeight="Medium" ui:Translator.LocalizedString="{Binding VersionText}"/>
+            <Label ui:Translator.Key="PROJECT_MAINTAINERS" Style="{StaticResource Header2}" Margin="10 20 0 5"/>
             <StackPanel Orientation="Horizontal" Margin="20 0">
             <StackPanel Orientation="Horizontal" Margin="20 0">
                 <Ellipse Width="32" Height="32" FlowDirection="LeftToRight">
                 <Ellipse Width="32" Height="32" FlowDirection="LeftToRight">
                     <Ellipse.Fill>
                     <Ellipse.Fill>
@@ -83,7 +84,7 @@
             <Label Style="{StaticResource SettingsText}" Margin="20 10 0 0" FontSize="14">
             <Label Style="{StaticResource SettingsText}" Margin="20 10 0 0" FontSize="14">
                 <Hyperlink Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://github.com/PixiEditor/PixiEditor/graphs/contributors"
                 <Hyperlink Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://github.com/PixiEditor/PixiEditor/graphs/contributors"
                            Style="{StaticResource SettingsLink}">
                            Style="{StaticResource SettingsLink}">
-                    <Run views:Translator.Key="OTHER_AWESOME_CONTRIBUTORS" />
+                    <Run ui:Translator.Key="OTHER_AWESOME_CONTRIBUTORS" />
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                 </Hyperlink>
                 </Hyperlink>
             </Label>
             </Label>
@@ -93,7 +94,7 @@
             <Label Style="{StaticResource SettingsText}" Margin="20 10 0 0" FontSize="14">
             <Label Style="{StaticResource SettingsText}" Margin="20 10 0 0" FontSize="14">
                 <Hyperlink Command="{cmds:Command PixiEditor.Links.OpenLicense}"
                 <Hyperlink Command="{cmds:Command PixiEditor.Links.OpenLicense}"
                            Style="{StaticResource SettingsLink}">
                            Style="{StaticResource SettingsLink}">
-                    <Run views:Translator.Key="LICENSE"/>
+                    <Run ui:Translator.Key="LICENSE"/>
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                 </Hyperlink>
                 </Hyperlink>
             </Label>
             </Label>
@@ -101,7 +102,7 @@
             <Label Style="{StaticResource SettingsText}" Margin="20 10 0 0" FontSize="14">
             <Label Style="{StaticResource SettingsText}" Margin="20 10 0 0" FontSize="14">
                 <Hyperlink Command="{cmds:Command PixiEditor.Links.OpenOtherLicenses}"
                 <Hyperlink Command="{cmds:Command PixiEditor.Links.OpenOtherLicenses}"
                            Style="{StaticResource SettingsLink}">
                            Style="{StaticResource SettingsLink}">
-                    <Run views:Translator.Key="THIRD_PARTY_LICENSES"/>
+                    <Run ui:Translator.Key="THIRD_PARTY_LICENSES"/>
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                 </Hyperlink>
                 </Hyperlink>
             </Label>
             </Label>
@@ -109,29 +110,29 @@
             <Label Style="{StaticResource SettingsText}" Margin="20 10 0 0" FontSize="14">
             <Label Style="{StaticResource SettingsText}" Margin="20 10 0 0" FontSize="14">
                 <Hyperlink Command="{cmds:Command PixiEditor.Links.OpenDocumentation}"
                 <Hyperlink Command="{cmds:Command PixiEditor.Links.OpenDocumentation}"
                            Style="{StaticResource SettingsLink}">
                            Style="{StaticResource SettingsLink}">
-                    <Run views:Translator.Key="DOCUMENTATION" />
+                    <Run ui:Translator.Key="DOCUMENTATION" />
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                 </Hyperlink>
                 </Hyperlink>
             </Label>
             </Label>
             
             
             <userControls:AlignableWrapPanel DockPanel.Dock="Bottom" HorizontalContentAlignment="Center" HorizontalAlignment="Center" Margin="0,20,0,15">
             <userControls:AlignableWrapPanel DockPanel.Dock="Bottom" HorizontalContentAlignment="Center" HorizontalAlignment="Center" Margin="0,20,0,15">
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://pixieditor.net"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://pixieditor.net"
-                            Style="{StaticResource SocialMediaButton}" Tag="#e3002d" views:Translator.TooltipKey="WEBSITE"
+                            Style="{StaticResource SocialMediaButton}" Tag="#e3002d" ui:Translator.TooltipKey="WEBSITE"
                             Content="/Images/SocialMedia/WebsiteIcon.png"/>
                             Content="/Images/SocialMedia/WebsiteIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://discord.gg/tzkQFDkqQS"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://discord.gg/tzkQFDkqQS"
-                            Style="{StaticResource SocialMediaButton}" Tag="#7289DA" views:Translator.TooltipKey="DISCORD"
+                            Style="{StaticResource SocialMediaButton}" Tag="#7289DA" ui:Translator.TooltipKey="DISCORD"
                             Content="/Images/SocialMedia/DiscordIcon.png"/>
                             Content="/Images/SocialMedia/DiscordIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://reddit.com/r/PixiEditor"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://reddit.com/r/PixiEditor"
-                            Style="{StaticResource SocialMediaButton}" Tag="#FF4500" views:Translator.TooltipKey="REDDIT"
+                            Style="{StaticResource SocialMediaButton}" Tag="#FF4500" ui:Translator.TooltipKey="REDDIT"
                             Content="/Images/SocialMedia/RedditIcon.png"/>
                             Content="/Images/SocialMedia/RedditIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://github.com/PixiEditor/PixiEditor"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://github.com/PixiEditor/PixiEditor"
-                            Style="{StaticResource SocialMediaButton}" Tag="Black" views:Translator.TooltipKey="GITHUB"
+                            Style="{StaticResource SocialMediaButton}" Tag="Black" ui:Translator.TooltipKey="GITHUB"
                             Content="/Images/SocialMedia/GithubIcon.png"/>
                             Content="/Images/SocialMedia/GithubIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://www.youtube.com/channel/UCT5XvyvX1q5PAIaXfWmpsMQ" 
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://www.youtube.com/channel/UCT5XvyvX1q5PAIaXfWmpsMQ" 
-                            Style="{StaticResource SocialMediaButton}" Tag="#FF0000" views:Translator.TooltipKey="YOUTUBE"
+                            Style="{StaticResource SocialMediaButton}" Tag="#FF0000" ui:Translator.TooltipKey="YOUTUBE"
                             Content="/Images/SocialMedia/YouTubeIcon.png"/>
                             Content="/Images/SocialMedia/YouTubeIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://opencollective.com/pixieditor"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://opencollective.com/pixieditor"
-                            Style="{StaticResource SocialMediaButton}" Tag="#d4af37" views:Translator.TooltipKey="DONATE"
+                            Style="{StaticResource SocialMediaButton}" Tag="#d4af37" ui:Translator.TooltipKey="DONATE"
                             Visibility="{Binding DisplayDonationButton, Converter={BoolToVisibilityConverter}}"
                             Visibility="{Binding DisplayDonationButton, Converter={BoolToVisibilityConverter}}"
                             Content="/Images/SocialMedia/DonateIcon.png"/>
                             Content="/Images/SocialMedia/DonateIcon.png"/>
                 </userControls:AlignableWrapPanel>
                 </userControls:AlignableWrapPanel>

+ 2 - 1
src/PixiEditor/Views/Dialogs/BasicPopup.xaml

@@ -9,12 +9,13 @@
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
         xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
         xmlns:behaviours="clr-namespace:PixiEditor.Helpers.Behaviours"
         xmlns:behaviours="clr-namespace:PixiEditor.Helpers.Behaviours"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d"
         mc:Ignorable="d"
         WindowStyle="None"
         WindowStyle="None"
         d:Title="Notice" Height="250" Width="350"
         d:Title="Notice" Height="250" Width="350"
         WindowStartupLocation="CenterScreen"
         WindowStartupLocation="CenterScreen"
         x:Name="popup"
         x:Name="popup"
-        views:Translator.Key="{Binding ElementName=popup, Path=Title}"
+        ui:Translator.Key="{Binding ElementName=popup, Path=Title}"
         FlowDirection="{helpers:Localization FlowDirection}">
         FlowDirection="{helpers:Localization FlowDirection}">
 
 
     <WindowChrome.WindowChrome>
     <WindowChrome.WindowChrome>

+ 5 - 4
src/PixiEditor/Views/Dialogs/ConfirmationPopup.xaml

@@ -10,11 +10,12 @@
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d" d:Title="Unsaved changes"
         mc:Ignorable="d" d:Title="Unsaved changes"
         Name="popup" WindowStartupLocation="CenterScreen" 
         Name="popup" WindowStartupLocation="CenterScreen" 
         Height="180" Width="400" MinHeight="180" MinWidth="400"
         Height="180" Width="400" MinHeight="180" MinWidth="400"
         WindowStyle="None"
         WindowStyle="None"
-        views:Translator.Key="{Binding ElementName=popup, Path=Title}"
+        ui:Translator.Key="{Binding ElementName=popup, Path=Title}"
         FlowDirection="{helpers:Localization FlowDirection}"
         FlowDirection="{helpers:Localization FlowDirection}"
         d:DataContext="{d:DesignInstance dial:ConfirmationPopup}">
         d:DataContext="{d:DesignInstance dial:ConfirmationPopup}">
 
 
@@ -35,7 +36,7 @@
                     Margin="0,0,10,15">
                     Margin="0,0,10,15">
             <Button Margin="10,0,10,0" IsDefault="True" Padding="5 0"
             <Button Margin="10,0,10,0" IsDefault="True" Padding="5 0"
                     Command="{Binding Path=DataContext.SetResultAndCloseCommand, ElementName=popup}"
                     Command="{Binding Path=DataContext.SetResultAndCloseCommand, ElementName=popup}"
-                    views:Translator.LocalizedString="{Binding FirstOptionText}"
+                    ui:Translator.LocalizedString="{Binding FirstOptionText}"
                     Style="{StaticResource DarkRoundButton}">
                     Style="{StaticResource DarkRoundButton}">
                 <Button.CommandParameter>
                 <Button.CommandParameter>
                     <system:Boolean>True</system:Boolean>
                     <system:Boolean>True</system:Boolean>
@@ -43,13 +44,13 @@
             </Button>
             </Button>
             <Button Padding="5 0"
             <Button Padding="5 0"
                     Command="{Binding Path=DataContext.SetResultAndCloseCommand, ElementName=popup}"
                     Command="{Binding Path=DataContext.SetResultAndCloseCommand, ElementName=popup}"
-                    views:Translator.LocalizedString="{Binding SecondOptionText}"
+                    ui:Translator.LocalizedString="{Binding SecondOptionText}"
                     Style="{StaticResource DarkRoundButton}">
                     Style="{StaticResource DarkRoundButton}">
                 <Button.CommandParameter>
                 <Button.CommandParameter>
                     <system:Boolean>False</system:Boolean>
                     <system:Boolean>False</system:Boolean>
                 </Button.CommandParameter>
                 </Button.CommandParameter>
             </Button>
             </Button>
-            <Button Margin="10,0,10,0" Style="{StaticResource DarkRoundButton}" views:Translator.Key="CANCEL"
+            <Button Margin="10,0,10,0" Style="{StaticResource DarkRoundButton}" ui:Translator.Key="CANCEL"
                     Command="{Binding DataContext.CancelCommand, ElementName=popup}" />
                     Command="{Binding DataContext.CancelCommand, ElementName=popup}" />
         </StackPanel>
         </StackPanel>
 
 

+ 2 - 1
src/PixiEditor/Views/Dialogs/DebugDialogs/CommandDebugPopup.xaml

@@ -10,11 +10,12 @@
         xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML" xmlns:usercontrols="clr-namespace:PixiEditor.Views.UserControls" xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
         xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML" xmlns:usercontrols="clr-namespace:PixiEditor.Views.UserControls" xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:views="clr-namespace:PixiEditor.Views"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         WindowStyle="None"
         WindowStyle="None"
         mc:Ignorable="d"
         mc:Ignorable="d"
         x:Name="uc"
         x:Name="uc"
         Foreground="White"
         Foreground="White"
-        views:Translator.Key="COMMAND_DEBUG_WINDOW_TITLE"
+        ui:Translator.Key="COMMAND_DEBUG_WINDOW_TITLE"
         Height="450" Width="800"
         Height="450" Width="800"
         FlowDirection="{helpers:Localization FlowDirection}">
         FlowDirection="{helpers:Localization FlowDirection}">
 
 

+ 14 - 13
src/PixiEditor/Views/Dialogs/DebugDialogs/Localization/LocalizationDebugWindow.xaml

@@ -15,10 +15,11 @@
         xmlns:globalization="clr-namespace:System.Globalization;assembly=System.Runtime"
         xmlns:globalization="clr-namespace:System.Globalization;assembly=System.Runtime"
         xmlns:main="clr-namespace:PixiEditor.ViewModels.SubViewModels.Main"
         xmlns:main="clr-namespace:PixiEditor.ViewModels.SubViewModels.Main"
         xmlns:localization="clr-namespace:PixiEditor.Extensions.Common.Localization;assembly=PixiEditor.Extensions"
         xmlns:localization="clr-namespace:PixiEditor.Extensions.Common.Localization;assembly=PixiEditor.Extensions"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         x:Name="popup"
         x:Name="popup"
         mc:Ignorable="d"
         mc:Ignorable="d"
         Foreground="White"
         Foreground="White"
-        views:Translator.Key="LOCALIZATION_DEBUG_WINDOW_TITLE"
+        ui:Translator.Key="LOCALIZATION_DEBUG_WINDOW_TITLE"
         MinHeight="240" MinWidth="465"
         MinHeight="240" MinWidth="465"
         Height="350" Width="465"
         Height="350" Width="465"
         FlowDirection="{helpers:Localization FlowDirection}"
         FlowDirection="{helpers:Localization FlowDirection}"
@@ -53,16 +54,16 @@
 
 
         <StackPanel Grid.Row="1" Margin="5">
         <StackPanel Grid.Row="1" Margin="5">
             <StackPanel Orientation="Horizontal" Height="25">
             <StackPanel Orientation="Horizontal" Height="25">
-                <TextBlock views:Translator.Key="LOCALIZATION_VIEW_TYPE" Margin="0,0,5,0" MinWidth="160" />
+                <TextBlock ui:Translator.Key="LOCALIZATION_VIEW_TYPE" Margin="0,0,5,0" MinWidth="160" />
                 <ComboBox
                 <ComboBox
                     SelectedItem="{Binding DebugViewModel.LocalizationKeyShowMode}"
                     SelectedItem="{Binding DebugViewModel.LocalizationKeyShowMode}"
                     ItemsSource="{helpers:Enum {x:Type localization:LocalizationKeyShowMode}}" />
                     ItemsSource="{helpers:Enum {x:Type localization:LocalizationKeyShowMode}}" />
             </StackPanel>
             </StackPanel>
             <StackPanel Orientation="Horizontal" Height="25" Margin="0,5,0,0">
             <StackPanel Orientation="Horizontal" Height="25" Margin="0,5,0,0">
-                <TextBlock views:Translator.Key="FORCE_OTHER_FLOW_DIRECTION" Margin="0,0,5,0" MinWidth="160" />
+                <TextBlock ui:Translator.Key="FORCE_OTHER_FLOW_DIRECTION" Margin="0,0,5,0" MinWidth="160" />
                 <CheckBox IsChecked="{Binding DebugViewModel.ForceOtherFlowDirection}" />
                 <CheckBox IsChecked="{Binding DebugViewModel.ForceOtherFlowDirection}" />
             </StackPanel>
             </StackPanel>
-            <Button views:Translator.Key="LOAD_LANGUAGE_FROM_FILE"
+            <Button ui:Translator.Key="LOAD_LANGUAGE_FROM_FILE"
                     Command="{xaml:Command PixiEditor.Debug.SetLanguageFromFilePicker}"
                     Command="{xaml:Command PixiEditor.Debug.SetLanguageFromFilePicker}"
                     Style="{StaticResource DarkRoundButton}" Margin="0,5,0,0" />
                     Style="{StaticResource DarkRoundButton}" Margin="0,5,0,0" />
             <TextBlock Text="POEditor" FontWeight="Bold" FontSize="22" Margin="0,10,0,0" />
             <TextBlock Text="POEditor" FontWeight="Bold" FontSize="22" Margin="0,10,0,0" />
@@ -72,12 +73,12 @@
                     <ColumnDefinition />
                     <ColumnDefinition />
                     <ColumnDefinition Width="120" />
                     <ColumnDefinition Width="120" />
                 </Grid.ColumnDefinitions>
                 </Grid.ColumnDefinitions>
-                <TextBlock views:Translator.Key="API_KEY" Margin="0,0,5,0"></TextBlock>
+                <TextBlock ui:Translator.Key="API_KEY" Margin="0,0,5,0"></TextBlock>
                 <TextBox Grid.Column="1" Style="{StaticResource DarkTextBoxStyle}" TextChanged="ApiKeyChanged"
                 <TextBox Grid.Column="1" Style="{StaticResource DarkTextBoxStyle}" TextChanged="ApiKeyChanged"
                          Text="{Binding ApiKey}">
                          Text="{Binding ApiKey}">
                 </TextBox>
                 </TextBox>
                 <Button Margin="5,0,0,0" Grid.Column="2"
                 <Button Margin="5,0,0,0" Grid.Column="2"
-                        views:Translator.Key="LOG_IN"
+                        ui:Translator.Key="LOG_IN"
                         Command="{Binding LoadApiKeyCommand}" />
                         Command="{Binding LoadApiKeyCommand}" />
             </Grid>
             </Grid>
             <StackPanel
             <StackPanel
@@ -87,7 +88,7 @@
                         <ColumnDefinition Width="120" />
                         <ColumnDefinition Width="120" />
                         <ColumnDefinition />
                         <ColumnDefinition />
                     </Grid.ColumnDefinitions>
                     </Grid.ColumnDefinitions>
-                    <TextBlock views:Translator.Key="LANGUAGE" Margin="0,0,5,0" />
+                    <TextBlock ui:Translator.Key="LANGUAGE" Margin="0,0,5,0" />
                     <Grid Grid.Column="1">
                     <Grid Grid.Column="1">
                         <ComboBox ItemsSource="{Binding LanguageCodes}"
                         <ComboBox ItemsSource="{Binding LanguageCodes}"
                                   SelectedItem="{Binding SelectedLanguage}"
                                   SelectedItem="{Binding SelectedLanguage}"
@@ -136,7 +137,7 @@
                                 </Style>
                                 </Style>
                             </ComboBox.ItemContainerStyle>
                             </ComboBox.ItemContainerStyle>
                         </ComboBox>
                         </ComboBox>
-                        <TextBlock views:Translator.Key="SELECT_A_LANGUAGE" Visibility="{Binding SelectedItem, ElementName=LanguageComboBox, Converter={converters:NullToVisibilityConverter}}"
+                        <TextBlock ui:Translator.Key="SELECT_A_LANGUAGE" Visibility="{Binding SelectedItem, ElementName=LanguageComboBox, Converter={converters:NullToVisibilityConverter}}"
                                    Margin="5,0,0,0" VerticalAlignment="Center"
                                    Margin="5,0,0,0" VerticalAlignment="Center"
                                    IsHitTestVisible="False">
                                    IsHitTestVisible="False">
                         </TextBlock>
                         </TextBlock>
@@ -158,7 +159,7 @@
                             </TextBlock>
                             </TextBlock>
                             <TextBlock Grid.Column="1">
                             <TextBlock Grid.Column="1">
                                 <Run Text="{Binding SelectedLanguage.Percentage, Mode=OneWay, StringFormat='\{0\}%'}"/>
                                 <Run Text="{Binding SelectedLanguage.Percentage, Mode=OneWay, StringFormat='\{0\}%'}"/>
-                                <Run views:Translator.Key="DONE"/>
+                                <Run ui:Translator.Key="DONE"/>
                             </TextBlock>
                             </TextBlock>
                         </Grid>
                         </Grid>
                         <Grid Margin="0,0,0,5">
                         <Grid Margin="0,0,0,5">
@@ -168,8 +169,8 @@
                                 <ColumnDefinition Width="Auto" />
                                 <ColumnDefinition Width="Auto" />
                             </Grid.ColumnDefinitions>
                             </Grid.ColumnDefinitions>
                             <Border Background="{Binding SelectedLanguage.StatusBrush}" CornerRadius="2" />
                             <Border Background="{Binding SelectedLanguage.StatusBrush}" CornerRadius="2" />
-                            <TextBlock Grid.Column="1" views:Translator.LocalizedString="{Binding SelectedLanguage.StatusText}" Margin="5,0" />
-                            <TextBlock Grid.Column="2" views:Translator.TooltipKey="COPY_TO_CLIPBOARD">
+                            <TextBlock Grid.Column="1" ui:Translator.LocalizedString="{Binding SelectedLanguage.StatusText}" Margin="5,0" />
+                            <TextBlock Grid.Column="2" ui:Translator.TooltipKey="COPY_TO_CLIPBOARD">
                                 <Hyperlink Command="{Binding CopySelectedUpdatedCommand}">
                                 <Hyperlink Command="{Binding CopySelectedUpdatedCommand}">
                                     <Run
                                     <Run
                                         Text="{Binding SelectedLanguage.UpdatedLocal, Mode=OneWay, StringFormat='g', ConverterCulture={x:Static globalization:CultureInfo.CurrentCulture}}" />
                                         Text="{Binding SelectedLanguage.UpdatedLocal, Mode=OneWay, StringFormat='g', ConverterCulture={x:Static globalization:CultureInfo.CurrentCulture}}" />
@@ -182,8 +183,8 @@
                                 <ColumnDefinition />
                                 <ColumnDefinition />
                                 <ColumnDefinition Width="{Binding Source={x:Static main:DebugViewModel.IsDebugBuild}, Converter={converters:BoolToValueConverter FalseValue=Auto, TrueValue=*}}" />
                                 <ColumnDefinition Width="{Binding Source={x:Static main:DebugViewModel.IsDebugBuild}, Converter={converters:BoolToValueConverter FalseValue=Auto, TrueValue=*}}" />
                             </Grid.ColumnDefinitions>
                             </Grid.ColumnDefinitions>
-                            <Button views:Translator.Key="APPLY" Command="{Binding ApplyLanguageCommand}" />
-                            <Button Grid.Column="1" Margin="5,0,0,0"  views:Translator.Key="UPDATE_SOURCE" Command="{Binding UpdateSourceCommand}"
+                            <Button ui:Translator.Key="APPLY" Command="{Binding ApplyLanguageCommand}" />
+                            <Button Grid.Column="1" Margin="5,0,0,0"  ui:Translator.Key="UPDATE_SOURCE" Command="{Binding UpdateSourceCommand}"
                                     Visibility="{Binding Source={x:Static main:DebugViewModel.IsDebugBuild}, Converter={BoolToVisibilityConverter}}"/>
                                     Visibility="{Binding Source={x:Static main:DebugViewModel.IsDebugBuild}, Converter={BoolToVisibilityConverter}}"/>
                         </Grid>
                         </Grid>
                     </StackPanel>
                     </StackPanel>

+ 2 - 1
src/PixiEditor/Views/Dialogs/DialogTitleBar.xaml

@@ -6,6 +6,7 @@
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:PixiEditor.Views.Dialogs"
              xmlns:local="clr-namespace:PixiEditor.Views.Dialogs"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d"
              mc:Ignorable="d"
              x:Name="uc"
              x:Name="uc"
              Height="35" d:DesignWidth="300">
              Height="35" d:DesignWidth="300">
@@ -16,7 +17,7 @@
         </Grid.ColumnDefinitions>
         </Grid.ColumnDefinitions>
         <TextBlock 
         <TextBlock 
             TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" 
             TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" 
-            views:Translator.Key="{Binding ElementName=uc, Path=TitleKey}"
+            ui:Translator.Key="{Binding ElementName=uc, Path=TitleKey}"
             Foreground="White" 
             Foreground="White" 
             FontSize="15" 
             FontSize="15" 
             Margin="5,0,0,0" 
             Margin="5,0,0,0" 

+ 12 - 1
src/PixiEditor/Views/Dialogs/DialogTitleBar.xaml.cs

@@ -1,10 +1,11 @@
 using System.Windows;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Controls;
+using System.Windows.Data;
 using System.Windows.Input;
 using System.Windows.Input;
 
 
 namespace PixiEditor.Views.Dialogs;
 namespace PixiEditor.Views.Dialogs;
 
 
-internal partial class DialogTitleBar : UserControl
+internal partial class DialogTitleBar : UserControl, ICustomTranslatorElement
 {
 {
     public static readonly DependencyProperty TitleKeyProperty =
     public static readonly DependencyProperty TitleKeyProperty =
         DependencyProperty.Register(nameof(TitleKey), typeof(string), typeof(DialogTitleBar), new PropertyMetadata(""));
         DependencyProperty.Register(nameof(TitleKey), typeof(string), typeof(DialogTitleBar), new PropertyMetadata(""));
@@ -31,4 +32,14 @@ internal partial class DialogTitleBar : UserControl
     {
     {
         InitializeComponent();
         InitializeComponent();
     }
     }
+
+    void ICustomTranslatorElement.SetTranslationBinding(DependencyProperty dependencyProperty, Binding binding)
+    {
+        SetBinding(dependencyProperty, binding);
+    }
+
+    DependencyProperty ICustomTranslatorElement.GetDependencyProperty()
+    {
+        return TitleKeyProperty;
+    }
 }
 }

+ 3 - 2
src/PixiEditor/Views/Dialogs/ExportFilePopup.xaml

@@ -10,9 +10,10 @@
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d" BorderBrush="Black" BorderThickness="1"
         mc:Ignorable="d" BorderBrush="Black" BorderThickness="1"
         WindowStyle="None" MinHeight="330" MinWidth="310" Width="310"
         WindowStyle="None" MinHeight="330" MinWidth="310" Width="310"
-        local:Translator.Key="EXPORT_IMAGE"
+        ui:Translator.Key="EXPORT_IMAGE"
         SizeToContent="Height"
         SizeToContent="Height"
         WindowStartupLocation="CenterScreen" Name="saveFilePopup"
         WindowStartupLocation="CenterScreen" Name="saveFilePopup"
         FlowDirection="{helpers:Localization FlowDirection}">
         FlowDirection="{helpers:Localization FlowDirection}">
@@ -36,7 +37,7 @@
             TitleKey="EXPORT_IMAGE" CloseCommand="{x:Static SystemCommands.CloseWindowCommand}"/>
             TitleKey="EXPORT_IMAGE" CloseCommand="{x:Static SystemCommands.CloseWindowCommand}"/>
 
 
         <Button DockPanel.Dock="Bottom" HorizontalAlignment="Center" IsDefault="True"
         <Button DockPanel.Dock="Bottom" HorizontalAlignment="Center" IsDefault="True"
-                    Margin="15" Style="{StaticResource DarkRoundButton}" local:Translator.Key="EXPORT" Command="{Binding OkCommand}"
+                    Margin="15" Style="{StaticResource DarkRoundButton}" ui:Translator.Key="EXPORT" Command="{Binding OkCommand}"
                     CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />
                     CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />
 
 
         <Border HorizontalAlignment="Center" Margin="15,30,15,0" Background="{StaticResource MainColor}"
         <Border HorizontalAlignment="Center" Margin="15,30,15,0" Background="{StaticResource MainColor}"

+ 11 - 10
src/PixiEditor/Views/Dialogs/HelloTherePopup.xaml

@@ -12,6 +12,7 @@
         xmlns:models="clr-namespace:PixiEditor.Models"
         xmlns:models="clr-namespace:PixiEditor.Models"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d" ShowInTaskbar="False"
         mc:Ignorable="d" ShowInTaskbar="False"
         Title="Hello there!" Height="662" Width="632" MinHeight="500" MinWidth="500"
         Title="Hello there!" Height="662" Width="632" MinHeight="500" MinWidth="500"
         d:DataContext="{d:DesignInstance local:HelloTherePopup}"
         d:DataContext="{d:DesignInstance local:HelloTherePopup}"
@@ -66,16 +67,16 @@
 
 
                 <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center">
                 <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center">
                     <Button Style="{StaticResource DarkRoundButton}" Command="{Binding OpenFileCommand}" MinWidth="150" Margin="10"
                     <Button Style="{StaticResource DarkRoundButton}" Command="{Binding OpenFileCommand}" MinWidth="150" Margin="10"
-                            views:Translator.Key="OPEN_FILE"/>
+                            ui:Translator.Key="OPEN_FILE"/>
                     <Button Style="{StaticResource DarkRoundButton}" Command="{Binding OpenNewFileCommand}" MinWidth="150" Margin="10"
                     <Button Style="{StaticResource DarkRoundButton}" Command="{Binding OpenNewFileCommand}" MinWidth="150" Margin="10"
-                            views:Translator.Key="NEW_FILE"/>
+                            ui:Translator.Key="NEW_FILE"/>
                 </StackPanel>
                 </StackPanel>
 
 
                 <StackPanel Grid.Row="2" HorizontalAlignment="Center" Margin="0,30,0,0">
                 <StackPanel Grid.Row="2" HorizontalAlignment="Center" Margin="0,30,0,0">
                     <TextBlock FontSize="23" FontWeight="SemiBold" HorizontalAlignment="Center"
                     <TextBlock FontSize="23" FontWeight="SemiBold" HorizontalAlignment="Center"
-                               views:Translator.Key="RECENT_FILES"/>
+                               ui:Translator.Key="RECENT_FILES"/>
                     <TextBlock Margin="0,12.5,0,0" Foreground="LightGray" HorizontalAlignment="Center" 
                     <TextBlock Margin="0,12.5,0,0" Foreground="LightGray" HorizontalAlignment="Center" 
-                               views:Translator.Key="RECENT_EMPTY_TEXT">
+                               ui:Translator.Key="RECENT_EMPTY_TEXT">
                         <TextBlock.Visibility>
                         <TextBlock.Visibility>
                             <Binding Path="RecentlyOpened.Count"
                             <Binding Path="RecentlyOpened.Count"
                                      Converter="{converters:EqualityBoolToVisibilityConverter}">
                                      Converter="{converters:EqualityBoolToVisibilityConverter}">
@@ -241,26 +242,26 @@
 
 
                 <uc:AlignableWrapPanel Grid.Row="3" HorizontalContentAlignment="Center" HorizontalAlignment="Center" Margin="0,5,0,15">
                 <uc:AlignableWrapPanel Grid.Row="3" HorizontalContentAlignment="Center" HorizontalAlignment="Center" Margin="0,5,0,15">
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://pixieditor.net"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://pixieditor.net"
-                            views:Translator.TooltipKey="WEBSITE"
+                            ui:Translator.TooltipKey="WEBSITE"
                             Style="{StaticResource SocialMediaButton}" Tag="#e3002d"
                             Style="{StaticResource SocialMediaButton}" Tag="#e3002d"
                             Content="/Images/SocialMedia/WebsiteIcon.png"/>
                             Content="/Images/SocialMedia/WebsiteIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://discord.gg/tzkQFDkqQS"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://discord.gg/tzkQFDkqQS"
-                            Style="{StaticResource SocialMediaButton}" Tag="#7289DA" views:Translator.TooltipKey="DISCORD"
+                            Style="{StaticResource SocialMediaButton}" Tag="#7289DA" ui:Translator.TooltipKey="DISCORD"
                             Content="/Images/SocialMedia/DiscordIcon.png"/>
                             Content="/Images/SocialMedia/DiscordIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://reddit.com/r/PixiEditor"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://reddit.com/r/PixiEditor"
-                            Style="{StaticResource SocialMediaButton}" Tag="#FF4500" views:Translator.TooltipKey="REDDIT"
+                            Style="{StaticResource SocialMediaButton}" Tag="#FF4500" ui:Translator.TooltipKey="REDDIT"
                             Content="/Images/SocialMedia/RedditIcon.png"/>
                             Content="/Images/SocialMedia/RedditIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://github.com/PixiEditor/PixiEditor"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://github.com/PixiEditor/PixiEditor"
-                            Style="{StaticResource SocialMediaButton}" Tag="Black" views:Translator.TooltipKey="GITHUB"
+                            Style="{StaticResource SocialMediaButton}" Tag="Black" ui:Translator.TooltipKey="GITHUB"
                             Content="/Images/SocialMedia/GithubIcon.png"/>
                             Content="/Images/SocialMedia/GithubIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://www.youtube.com/channel/UCT5XvyvX1q5PAIaXfWmpsMQ"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}" CommandParameter="https://www.youtube.com/channel/UCT5XvyvX1q5PAIaXfWmpsMQ"
-                            Style="{StaticResource SocialMediaButton}" Tag="#FF0000" views:Translator.TooltipKey="YOUTUBE"
+                            Style="{StaticResource SocialMediaButton}" Tag="#FF0000" ui:Translator.TooltipKey="YOUTUBE"
                             Content="/Images/SocialMedia/YouTubeIcon.png"/>
                             Content="/Images/SocialMedia/YouTubeIcon.png"/>
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}"
                     <Button Command="{cmds:Command PixiEditor.Links.OpenHyperlink, UseProvided=True}"
                             Visibility="{Binding ShowDonateButton,
                             Visibility="{Binding ShowDonateButton,
                             Converter={BoolToVisibilityConverter}}"
                             Converter={BoolToVisibilityConverter}}"
                             CommandParameter="https://opencollective.com/pixieditor"
                             CommandParameter="https://opencollective.com/pixieditor"
-                            Style="{StaticResource SocialMediaButton}" Tag="#d4af37" views:Translator.TooltipKey="DONATE"
+                            Style="{StaticResource SocialMediaButton}" Tag="#d4af37" ui:Translator.TooltipKey="DONATE"
                             Content="/Images/SocialMedia/DonateIcon.png"/>
                             Content="/Images/SocialMedia/DonateIcon.png"/>
                 </uc:AlignableWrapPanel>
                 </uc:AlignableWrapPanel>
             </Grid>
             </Grid>

+ 2 - 1
src/PixiEditor/Views/Dialogs/ImportFilePopup.xaml

@@ -11,13 +11,14 @@
         xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
         xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d" BorderBrush="Black" BorderThickness="1"
         mc:Ignorable="d" BorderBrush="Black" BorderThickness="1"
         ShowInTaskbar="False" 
         ShowInTaskbar="False" 
         MinHeight="250" MinWidth="300" Height="250" Width="300" 
         MinHeight="250" MinWidth="300" Height="250" Width="300" 
         WindowStyle="None" 
         WindowStyle="None" 
         WindowStartupLocation="CenterScreen" 
         WindowStartupLocation="CenterScreen" 
         Name="importFilePopup"
         Name="importFilePopup"
-        local:Translator.Key="IMPORT_FILE_TITLE"
+        ui:Translator.Key="IMPORT_FILE_TITLE"
         DataContext="{DynamicResource ImportFilePopupViewModel}"
         DataContext="{DynamicResource ImportFilePopupViewModel}"
         FlowDirection="{helpers:Localization FlowDirection}">
         FlowDirection="{helpers:Localization FlowDirection}">
     <Window.Resources>
     <Window.Resources>

+ 2 - 1
src/PixiEditor/Views/Dialogs/ImportShortcutTemplatePopup.xaml

@@ -8,6 +8,7 @@
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:views="clr-namespace:PixiEditor.Views"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d"
         mc:Ignorable="d"
         Title="Import from template" Foreground="White"
         Title="Import from template" Foreground="White"
         WindowStartupLocation="CenterOwner"
         WindowStartupLocation="CenterOwner"
@@ -16,7 +17,7 @@
         Background="{StaticResource AccentColor}"
         Background="{StaticResource AccentColor}"
         x:Name="window"
         x:Name="window"
         FlowDirection="{helpers:Localization FlowDirection}"
         FlowDirection="{helpers:Localization FlowDirection}"
-        views:Translator.Key="IMPORT_FROM_TEMPLATE">
+        ui:Translator.Key="IMPORT_FROM_TEMPLATE">
 
 
     <Window.CommandBindings>
     <Window.CommandBindings>
         <CommandBinding Command="{x:Static SystemCommands.CloseWindowCommand}" CanExecute="CommandBinding_CanExecute"
         <CommandBinding Command="{x:Static SystemCommands.CloseWindowCommand}" CanExecute="CommandBinding_CanExecute"

+ 3 - 2
src/PixiEditor/Views/Dialogs/NewFilePopup.xaml

@@ -10,6 +10,7 @@
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d"
         mc:Ignorable="d"
         ShowInTaskbar="False"
         ShowInTaskbar="False"
         DataContext="{DynamicResource NewFileMenuViewModel}" 
         DataContext="{DynamicResource NewFileMenuViewModel}" 
@@ -20,7 +21,7 @@
         Name="newFilePopup" 
         Name="newFilePopup" 
         BorderBrush="Black" BorderThickness="1"
         BorderBrush="Black" BorderThickness="1"
         FlowDirection="{helpers:Localization FlowDirection}"
         FlowDirection="{helpers:Localization FlowDirection}"
-        local:Translator.Key="CREATE_NEW_IMAGE">
+        ui:Translator.Key="CREATE_NEW_IMAGE">
     <Window.Resources>
     <Window.Resources>
         <vm:NewFileMenuViewModel x:Key="NewFileMenuViewModel" />
         <vm:NewFileMenuViewModel x:Key="NewFileMenuViewModel" />
     </Window.Resources>
     </Window.Resources>
@@ -43,7 +44,7 @@
             TitleKey="CREATE_NEW_IMAGE" CloseCommand="{x:Static SystemCommands.CloseWindowCommand}" />
             TitleKey="CREATE_NEW_IMAGE" CloseCommand="{x:Static SystemCommands.CloseWindowCommand}" />
 
 
         <Button DockPanel.Dock="Bottom" Margin="0,15,0,15" HorizontalAlignment="Center"
         <Button DockPanel.Dock="Bottom" Margin="0,15,0,15" HorizontalAlignment="Center"
-                IsDefault="True" local:Translator.Key="CREATE" x:Name="createButton"
+                IsDefault="True" ui:Translator.Key="CREATE" x:Name="createButton"
                 Style="{StaticResource DarkRoundButton}" 
                 Style="{StaticResource DarkRoundButton}" 
                 Command="{Binding OkCommand}"
                 Command="{Binding OkCommand}"
                 CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />
                 CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />

+ 3 - 2
src/PixiEditor/Views/Dialogs/NoticePopup.xaml

@@ -10,11 +10,12 @@
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d" WindowStyle="None"
         mc:Ignorable="d" WindowStyle="None"
         d:Title="Notice" Height="180" Width="400" MinHeight="180" MinWidth="400"
         d:Title="Notice" Height="180" Width="400" MinHeight="180" MinWidth="400"
         WindowStartupLocation="CenterScreen"
         WindowStartupLocation="CenterScreen"
         x:Name="popup"
         x:Name="popup"
-        views:Translator.Key="{Binding ElementName=popup, Path=Title}"
+        ui:Translator.Key="{Binding ElementName=popup, Path=Title}"
         FlowDirection="{helpers:Localization FlowDirection}">
         FlowDirection="{helpers:Localization FlowDirection}">
 
 
     <WindowChrome.WindowChrome>
     <WindowChrome.WindowChrome>
@@ -31,7 +32,7 @@
             TitleKey="{Binding ElementName=popup, Path=Title}" CloseCommand="{Binding DataContext.CancelCommand, ElementName=popup}" />
             TitleKey="{Binding ElementName=popup, Path=Title}" CloseCommand="{Binding DataContext.CancelCommand, ElementName=popup}" />
 
 
         <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,0,0,15">
         <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,0,0,15">
-            <Button Width="70" IsDefault="True" Click="OkButton_Close" Style="{StaticResource DarkRoundButton}" views:Translator.Key="CLOSE"/>
+            <Button Width="70" IsDefault="True" Click="OkButton_Close" Style="{StaticResource DarkRoundButton}" ui:Translator.Key="CLOSE"/>
         </StackPanel>
         </StackPanel>
 
 
         <TextBlock 
         <TextBlock 

+ 2 - 1
src/PixiEditor/Views/Dialogs/OptionsPopup.xaml

@@ -8,13 +8,14 @@
         xmlns:uc="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:uc="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:views="clr-namespace:PixiEditor.Views"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d"
         mc:Ignorable="d"
         WindowStartupLocation="CenterScreen"
         WindowStartupLocation="CenterScreen"
         SizeToContent="WidthAndHeight"
         SizeToContent="WidthAndHeight"
         x:Name="popup"
         x:Name="popup"
         Background="{StaticResource AccentColor}" Foreground="White"
         Background="{StaticResource AccentColor}" Foreground="White"
         FlowDirection="{helpers:Localization FlowDirection}"
         FlowDirection="{helpers:Localization FlowDirection}"
-        views:Translator.Key="{Binding Title, ElementName=popup}">
+        ui:Translator.Key="{Binding Title, ElementName=popup}">
 
 
     <WindowChrome.WindowChrome>
     <WindowChrome.WindowChrome>
         <WindowChrome CaptionHeight="32"  GlassFrameThickness="0.1"
         <WindowChrome CaptionHeight="32"  GlassFrameThickness="0.1"

+ 22 - 21
src/PixiEditor/Views/Dialogs/PalettesBrowser.xaml

@@ -13,6 +13,7 @@
     xmlns:PixiEditor="clr-namespace:PixiEditor"
     xmlns:PixiEditor="clr-namespace:PixiEditor"
     xmlns:dialogs="clr-namespace:PixiEditor.Views.Dialogs"
     xmlns:dialogs="clr-namespace:PixiEditor.Views.Dialogs"
     xmlns:helpers="clr-namespace:PixiEditor.Helpers"
     xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+    xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
     x:Class="PixiEditor.Views.Dialogs.PalettesBrowser"
     x:Class="PixiEditor.Views.Dialogs.PalettesBrowser"
     mc:Ignorable="d"
     mc:Ignorable="d"
     WindowStartupLocation="CenterScreen" 
     WindowStartupLocation="CenterScreen" 
@@ -21,7 +22,7 @@
     WindowStyle="None"
     WindowStyle="None"
     x:Name="palettesBrowser"
     x:Name="palettesBrowser"
     FlowDirection="{helpers:Localization FlowDirection}"
     FlowDirection="{helpers:Localization FlowDirection}"
-    views:Translator.Key="PALETTE_BROWSER">
+    ui:Translator.Key="PALETTE_BROWSER">
     <Window.Resources>
     <Window.Resources>
         <BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
         <BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
     </Window.Resources>
     </Window.Resources>
@@ -46,11 +47,11 @@
 
 
         <DockPanel Background="{StaticResource MainColor}" Grid.Row="1">
         <DockPanel Background="{StaticResource MainColor}" Grid.Row="1">
             <StackPanel HorizontalAlignment="Left" Margin="10" Orientation="Horizontal" VerticalAlignment="Center">
             <StackPanel HorizontalAlignment="Left" Margin="10" Orientation="Horizontal" VerticalAlignment="Center">
-                <Label views:Translator.Key="SORT_BY" Style="{StaticResource BaseLabel}" VerticalAlignment="Center"/>
+                <Label ui:Translator.Key="SORT_BY" Style="{StaticResource BaseLabel}" VerticalAlignment="Center"/>
                 <ComboBox x:Name="sortingComboBox" VerticalAlignment="Center" SelectionChanged="SortingComboBox_SelectionChanged">
                 <ComboBox x:Name="sortingComboBox" VerticalAlignment="Center" SelectionChanged="SortingComboBox_SelectionChanged">
-                    <ComboBoxItem IsSelected="True" views:Translator.Key="DEFAULT"/>
-                    <ComboBoxItem views:Translator.Key="ALPHABETICAL"/>
-                    <ComboBoxItem views:Translator.Key="COLOR_COUNT"/>
+                    <ComboBoxItem IsSelected="True" ui:Translator.Key="DEFAULT"/>
+                    <ComboBoxItem ui:Translator.Key="ALPHABETICAL"/>
+                    <ComboBoxItem ui:Translator.Key="COLOR_COUNT"/>
                 </ComboBox>
                 </ComboBox>
                 <ToggleButton Margin="10 0 0 0" x:Name="toggleBtn"
                 <ToggleButton Margin="10 0 0 0" x:Name="toggleBtn"
                               IsChecked="{Binding SortAscending, ElementName=palettesBrowser}"
                               IsChecked="{Binding SortAscending, ElementName=palettesBrowser}"
@@ -66,50 +67,50 @@
                                                 <RotateTransform Angle="180" CenterX="11.5" CenterY="11.5"/>
                                                 <RotateTransform Angle="180" CenterX="11.5" CenterY="11.5"/>
                                             </Setter.Value>
                                             </Setter.Value>
                                         </Setter>
                                         </Setter>
-                                        <Setter Property="views:Translator.TooltipKey" Value="ASCENDING"/>
+                                        <Setter Property="ui:Translator.TooltipKey" Value="ASCENDING"/>
                                     </DataTrigger>
                                     </DataTrigger>
                                     <DataTrigger Binding="{Binding IsChecked, ElementName=toggleBtn}" Value="false">
                                     <DataTrigger Binding="{Binding IsChecked, ElementName=toggleBtn}" Value="false">
-                                        <Setter Property="views:Translator.TooltipKey" Value="DESCENDING"/>
+                                        <Setter Property="ui:Translator.TooltipKey" Value="DESCENDING"/>
                                     </DataTrigger>
                                     </DataTrigger>
                                 </Style.Triggers>
                                 </Style.Triggers>
                             </Style>
                             </Style>
                         </Image.Style>
                         </Image.Style>
                     </Image>
                     </Image>
                 </ToggleButton>
                 </ToggleButton>
-                <Label Margin="10 0 0 0" views:Translator.Key="NAME" Style="{StaticResource BaseLabel}" VerticalAlignment="Center"/>
+                <Label Margin="10 0 0 0" ui:Translator.Key="NAME" Style="{StaticResource BaseLabel}" VerticalAlignment="Center"/>
                 <usercontrols:InputBox
                 <usercontrols:InputBox
                                        Text="{Binding NameFilter, Delay=100, ElementName=palettesBrowser, UpdateSourceTrigger=PropertyChanged}"
                                        Text="{Binding NameFilter, Delay=100, ElementName=palettesBrowser, UpdateSourceTrigger=PropertyChanged}"
                                        VerticalAlignment="Center"
                                        VerticalAlignment="Center"
                                        Style="{StaticResource DarkTextBoxStyle}" Width="150" />
                                        Style="{StaticResource DarkTextBoxStyle}" Width="150" />
 
 
-                <Label Margin="10 0 0 0" views:Translator.Key="COLORS" Style="{StaticResource BaseLabel}" VerticalAlignment="Center"/>
+                <Label Margin="10 0 0 0" ui:Translator.Key="COLORS" Style="{StaticResource BaseLabel}" VerticalAlignment="Center"/>
                 <ComboBox x:Name="colorsComboBox" VerticalAlignment="Center" SelectionChanged="ColorsComboBox_SelectionChanged">
                 <ComboBox x:Name="colorsComboBox" VerticalAlignment="Center" SelectionChanged="ColorsComboBox_SelectionChanged">
-                    <ComboBoxItem IsSelected="True" views:Translator.Key="ANY"/>
-                    <ComboBoxItem views:Translator.Key="MAX"/>
-                    <ComboBoxItem views:Translator.Key="MIN"/>
-                    <ComboBoxItem views:Translator.Key="EXACT"/>
+                    <ComboBoxItem IsSelected="True" ui:Translator.Key="ANY"/>
+                    <ComboBoxItem ui:Translator.Key="MAX"/>
+                    <ComboBoxItem ui:Translator.Key="MIN"/>
+                    <ComboBoxItem ui:Translator.Key="EXACT"/>
                 </ComboBox>
                 </ComboBox>
                 <usercontrols:NumberInput Width="50" VerticalAlignment="Center" Margin="10 0 0 0"
                 <usercontrols:NumberInput Width="50" VerticalAlignment="Center" Margin="10 0 0 0"
                                    FocusNext="True"
                                    FocusNext="True"
                                    Value="{Binding ColorsNumber, ElementName=palettesBrowser, Mode=TwoWay}"/>
                                    Value="{Binding ColorsNumber, ElementName=palettesBrowser, Mode=TwoWay}"/>
                 <CheckBox Margin="10 0 0 0" VerticalAlignment="Center"
                 <CheckBox Margin="10 0 0 0" VerticalAlignment="Center"
-                          IsChecked="{Binding ShowOnlyFavourites, ElementName=palettesBrowser}" views:Translator.Key="FAVORITES"/>
+                          IsChecked="{Binding ShowOnlyFavourites, ElementName=palettesBrowser}" ui:Translator.Key="FAVORITES"/>
             </StackPanel>
             </StackPanel>
             <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0 0 10 0">
             <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0 0 10 0">
-                <Button views:Translator.TooltipKey="ADD_FROM_CURRENT_PALETTE" Click="AddFromPalette_OnClick" Cursor="Hand" Margin="10 0" Style="{StaticResource ImageButtonStyle}" Width="24" Height="24">
+                <Button ui:Translator.TooltipKey="ADD_FROM_CURRENT_PALETTE" Click="AddFromPalette_OnClick" Cursor="Hand" Margin="10 0" Style="{StaticResource ImageButtonStyle}" Width="24" Height="24">
                     <Image Source="/Images/Plus-square.png"/>
                     <Image Source="/Images/Plus-square.png"/>
                 </Button>
                 </Button>
                 <Button Cursor="Hand" Click="OpenFolder_OnClick" Style="{StaticResource ImageButtonStyle}" Width="24" Height="24"
                 <Button Cursor="Hand" Click="OpenFolder_OnClick" Style="{StaticResource ImageButtonStyle}" Width="24" Height="24"
-                        views:Translator.TooltipKey="OPEN_PALETTES_DIR_TOOLTIP">
+                        ui:Translator.TooltipKey="OPEN_PALETTES_DIR_TOOLTIP">
                     <Image Source="/Images/Folder.png"/>
                     <Image Source="/Images/Folder.png"/>
                 </Button>
                 </Button>
-                <Button HorizontalAlignment="Right" Margin="10 0 0 0" views:Translator.TooltipKey="BROWSE_ON_LOSPEC_TOOLTIP"
+                <Button HorizontalAlignment="Right" Margin="10 0 0 0" ui:Translator.TooltipKey="BROWSE_ON_LOSPEC_TOOLTIP"
                         Style="{StaticResource ImageButtonStyle}" Width="24" Height="24"
                         Style="{StaticResource ImageButtonStyle}" Width="24" Height="24"
                         Click="BrowseOnLospec_OnClick"
                         Click="BrowseOnLospec_OnClick"
                         CommandParameter="https://lospec.com/palette-list">
                         CommandParameter="https://lospec.com/palette-list">
                     <Image Source="/Images/Globe.png"/>
                     <Image Source="/Images/Globe.png"/>
                 </Button>
                 </Button>
-                <Button HorizontalAlignment="Right" Margin="10 0 0 0" views:Translator.TooltipKey="IMPORT_FROM_FILE_TOOLTIP"
+                <Button HorizontalAlignment="Right" Margin="10 0 0 0" ui:Translator.TooltipKey="IMPORT_FROM_FILE_TOOLTIP"
                         Style="{StaticResource ImageButtonStyle}" Width="24" Height="24"
                         Style="{StaticResource ImageButtonStyle}" Width="24" Height="24"
                         Click="ImportFromFile_OnClick">
                         Click="ImportFromFile_OnClick">
                     <Image Source="/Images/hard-drive.png"/>
                     <Image Source="/Images/hard-drive.png"/>
@@ -117,14 +118,14 @@
             </StackPanel>
             </StackPanel>
         </DockPanel>
         </DockPanel>
         <Grid Grid.Row="2" Margin="10">
         <Grid Grid.Row="2" Margin="10">
-            <TextBlock views:Translator.Key="COULD_NOT_LOAD_PALETTE" Foreground="White" FontSize="20" HorizontalAlignment="Center"
+            <TextBlock ui:Translator.Key="COULD_NOT_LOAD_PALETTE" Foreground="White" FontSize="20" HorizontalAlignment="Center"
                        VerticalAlignment="Center" Visibility="{Binding Visibility, Converter={converters:OppositeVisibilityConverter}, ElementName=itemsControl}"/>
                        VerticalAlignment="Center" Visibility="{Binding Visibility, Converter={converters:OppositeVisibilityConverter}, ElementName=itemsControl}"/>
             <StackPanel Panel.ZIndex="10" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding ElementName=palettesBrowser, Path=SortedResults.Count, Converter={converters:CountToVisibilityConverter}}">
             <StackPanel Panel.ZIndex="10" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding ElementName=palettesBrowser, Path=SortedResults.Count, Converter={converters:CountToVisibilityConverter}}">
-                <TextBlock views:Translator.Key="NO_PALETTES_FOUND" Foreground="White" FontSize="20" TextAlignment="Center"/>
+                <TextBlock ui:Translator.Key="NO_PALETTES_FOUND" Foreground="White" FontSize="20" TextAlignment="Center"/>
                 <TextBlock Margin="0 10 0 0">
                 <TextBlock Margin="0 10 0 0">
                     <Hyperlink Foreground="Gray" Cursor="Hand" FontSize="18" NavigateUri="https://lospec.com/palette-list"
                     <Hyperlink Foreground="Gray" Cursor="Hand" FontSize="18" NavigateUri="https://lospec.com/palette-list"
                                RequestNavigate="Hyperlink_OnRequestNavigate">
                                RequestNavigate="Hyperlink_OnRequestNavigate">
-                        <TextBlock views:Translator.Key="LOSPEC_LINK_TEXT"/>
+                        <TextBlock ui:Translator.Key="LOSPEC_LINK_TEXT"/>
                     </Hyperlink>
                     </Hyperlink>
                 </TextBlock>
                 </TextBlock>
                 <Image Width="128" Height="128" Source="/Images/Search.png"/>
                 <Image Width="128" Height="128" Source="/Images/Search.png"/>

+ 4 - 3
src/PixiEditor/Views/Dialogs/ResizeCanvasPopup.xaml

@@ -11,10 +11,11 @@
         xmlns:base="clr-namespace:PixiEditor.Views"
         xmlns:base="clr-namespace:PixiEditor.Views"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d" 
         mc:Ignorable="d" 
         x:Name="window"
         x:Name="window"
         ShowInTaskbar="False" WindowStartupLocation="CenterScreen"
         ShowInTaskbar="False" WindowStartupLocation="CenterScreen"
-        local:Translator.Key="RESIZE_CANVAS"
+        ui:Translator.Key="RESIZE_CANVAS"
         Height="420" Width="320" MinHeight="420" MinWidth="320" 
         Height="420" Width="320" MinHeight="420" MinWidth="320" 
         WindowStyle="None"
         WindowStyle="None"
         FlowDirection="{helpers:Localization FlowDirection}">
         FlowDirection="{helpers:Localization FlowDirection}">
@@ -38,7 +39,7 @@
             TitleKey="RESIZE_CANVAS" CloseCommand="{x:Static SystemCommands.CloseWindowCommand}" />
             TitleKey="RESIZE_CANVAS" CloseCommand="{x:Static SystemCommands.CloseWindowCommand}" />
 
 
         <Button DockPanel.Dock="Bottom" Padding="5 0" HorizontalAlignment="Center" Margin="15"
         <Button DockPanel.Dock="Bottom" Padding="5 0" HorizontalAlignment="Center" Margin="15"
-                Style="{StaticResource DarkRoundButton}" local:Translator.Key="RESIZE" Click="Button_Click" IsDefault="True" />
+                Style="{StaticResource DarkRoundButton}" ui:Translator.Key="RESIZE" Click="Button_Click" IsDefault="True" />
 
 
         <Border HorizontalAlignment="Center" Margin="0,30,0,0" Background="{StaticResource MainColor}"
         <Border HorizontalAlignment="Center" Margin="0,30,0,0" Background="{StaticResource MainColor}"
                  VerticalAlignment="Top" Grid.Row="1" Width="250" Height="290" CornerRadius="10">
                  VerticalAlignment="Top" Grid.Row="1" Width="250" Height="290" CornerRadius="10">
@@ -56,7 +57,7 @@
                                   />
                                   />
                 <Separator Margin="10,5,10,0" Background="{StaticResource AccentColor}" Height="1" />
                 <Separator Margin="10,5,10,0" Background="{StaticResource AccentColor}" Height="1" />
                 <DockPanel>
                 <DockPanel>
-                    <Label base:Translator.Key="ANCHOR_POINT" Foreground="White" Margin="25,5,0,0" HorizontalAlignment="Left"
+                    <Label ui:Translator.Key="ANCHOR_POINT" Foreground="White" Margin="25,5,0,0" HorizontalAlignment="Left"
                            FontSize="12" />
                            FontSize="12" />
                     <userControls:AnchorPointPicker AnchorPoint="{Binding Path=SelectedAnchorPoint, Mode=TwoWay, ElementName=window}"
                     <userControls:AnchorPointPicker AnchorPoint="{Binding Path=SelectedAnchorPoint, Mode=TwoWay, ElementName=window}"
                                              HorizontalAlignment="Right"
                                              HorizontalAlignment="Right"

+ 3 - 2
src/PixiEditor/Views/Dialogs/ResizeDocumentPopup.xaml

@@ -10,11 +10,12 @@
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         xmlns:dial="clr-namespace:PixiEditor.Views.Dialogs"
         mc:Ignorable="d" x:Name="window"
         mc:Ignorable="d" x:Name="window"
         ShowInTaskbar="False" WindowStartupLocation="CenterScreen"
         ShowInTaskbar="False" WindowStartupLocation="CenterScreen"
-        local:Translator.Key="RESIZE_IMAGE"
+        ui:Translator.Key="RESIZE_IMAGE"
         Height="305" Width="310" MinHeight="305" MinWidth="310"
         Height="305" Width="310" MinHeight="305" MinWidth="310"
         xmlns:base="clr-namespace:PixiEditor.Views"
         xmlns:base="clr-namespace:PixiEditor.Views"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         WindowStyle="None"
         WindowStyle="None"
         FlowDirection="{helpers:Localization FlowDirection}">
         FlowDirection="{helpers:Localization FlowDirection}">
 
 
@@ -37,7 +38,7 @@
             TitleKey="RESIZE_IMAGE" CloseCommand="{x:Static SystemCommands.CloseWindowCommand}"/>
             TitleKey="RESIZE_IMAGE" CloseCommand="{x:Static SystemCommands.CloseWindowCommand}"/>
 
 
         <Button DockPanel.Dock="Bottom" Padding="5 0" HorizontalAlignment="Center" Margin="15"
         <Button DockPanel.Dock="Bottom" Padding="5 0" HorizontalAlignment="Center" Margin="15"
-                Style="{StaticResource DarkRoundButton}" local:Translator.Key="RESIZE" Click="Button_Click" IsDefault="True" />
+                Style="{StaticResource DarkRoundButton}" ui:Translator.Key="RESIZE" Click="Button_Click" IsDefault="True" />
 
 
         <userControls:SizePicker HorizontalAlignment="Center" Width="240" Height="180" Margin="0,30,0,0"
         <userControls:SizePicker HorizontalAlignment="Center" Width="240" Height="180" Margin="0,30,0,0"
             x:Name="sizePicker"
             x:Name="sizePicker"

+ 3 - 2
src/PixiEditor/Views/Dialogs/SettingGroups/ShortcutsBinder.xaml

@@ -9,6 +9,7 @@
              xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
              xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
              xmlns:commands="clr-namespace:PixiEditor.Models.Commands"
              xmlns:commands="clr-namespace:PixiEditor.Models.Commands"
              xmlns:commands1="clr-namespace:PixiEditor.Models.Commands.Commands"
              xmlns:commands1="clr-namespace:PixiEditor.Models.Commands.Commands"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d"
              mc:Ignorable="d"
              d:DesignHeight="600" d:DesignWidth="400">
              d:DesignHeight="600" d:DesignWidth="400">
     <Grid>
     <Grid>
@@ -34,12 +35,12 @@
                     <Grid>
                     <Grid>
                         <TextBlock Foreground="LightGray" HorizontalAlignment="Center" TextAlignment="Center"
                         <TextBlock Foreground="LightGray" HorizontalAlignment="Center" TextAlignment="Center"
                                    Visibility="{Binding VisibleGroups, ConverterParameter=0, Mode=OneWay, Converter={converters:EqualityBoolToVisibilityConverter}}"
                                    Visibility="{Binding VisibleGroups, ConverterParameter=0, Mode=OneWay, Converter={converters:EqualityBoolToVisibilityConverter}}"
-                                   views:Translator.Key="NOTHING_FOUND"  d:Text="Nothing found."/>
+                                   ui:Translator.Key="NOTHING_FOUND"  d:Text="Nothing found."/>
                         <ItemsControl ItemsSource="{Binding Commands}" Foreground="White" Focusable="False">
                         <ItemsControl ItemsSource="{Binding Commands}" Foreground="White" Focusable="False">
                             <ItemsControl.ItemTemplate>
                             <ItemsControl.ItemTemplate>
                                 <DataTemplate DataType="{x:Type commands:CommandGroup}">
                                 <DataTemplate DataType="{x:Type commands:CommandGroup}">
                                     <StackPanel Margin="0,0,0,20" Visibility="{Binding Visibility}">
                                     <StackPanel Margin="0,0,0,20" Visibility="{Binding Visibility}">
-                                        <TextBlock views:Translator.Key="{Binding DisplayName.Key}" FontSize="22" FontWeight="SemiBold"/>
+                                        <TextBlock ui:Translator.Key="{Binding DisplayName.Key}" FontSize="22" FontWeight="SemiBold"/>
                                         <ItemsControl ItemsSource="{Binding Commands}" Focusable="False">
                                         <ItemsControl ItemsSource="{Binding Commands}" Focusable="False">
                                             <ItemsControl.ItemTemplate>
                                             <ItemsControl.ItemTemplate>
                                                 <DataTemplate DataType="{x:Type commands1:Command}">
                                                 <DataTemplate DataType="{x:Type commands1:Command}">

+ 29 - 28
src/PixiEditor/Views/Dialogs/SettingsWindow.xaml

@@ -17,6 +17,7 @@
         xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML"
         xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML"
         xmlns:settingGroups="clr-namespace:PixiEditor.Views.Dialogs.SettingGroups"
         xmlns:settingGroups="clr-namespace:PixiEditor.Views.Dialogs.SettingGroups"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d"
         mc:Ignorable="d"
         Name="window" 
         Name="window" 
         Height="688" Width="780"
         Height="688" Width="780"
@@ -26,7 +27,7 @@
         BorderBrush="Black" BorderThickness="1"
         BorderBrush="Black" BorderThickness="1"
         Background="{StaticResource AccentColor}"
         Background="{StaticResource AccentColor}"
         FlowDirection="{helpers:Localization FlowDirection}"
         FlowDirection="{helpers:Localization FlowDirection}"
-        views:Translator.Key="SETTINGS">
+        ui:Translator.Key="SETTINGS">
     <Window.Resources>
     <Window.Resources>
         <viewmodels:SettingsWindowViewModel x:Key="SettingsWindowViewModel"/>
         <viewmodels:SettingsWindowViewModel x:Key="SettingsWindowViewModel"/>
         <BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
         <BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
@@ -66,7 +67,7 @@
                         <Binding.ConverterParameter><sys:Int32>0</sys:Int32></Binding.ConverterParameter>
                         <Binding.ConverterParameter><sys:Int32>0</sys:Int32></Binding.ConverterParameter>
                     </Binding>
                     </Binding>
                 </StackPanel.Visibility>
                 </StackPanel.Visibility>
-                <Label Style="{StaticResource SettingsHeader}" views:Translator.Key="LANGUAGE"/>
+                <Label Style="{StaticResource SettingsHeader}" ui:Translator.Key="LANGUAGE"/>
                 <ComboBox Margin="27 5" Width="200" Height="25" FontSize="12" HorizontalAlignment="Left"
                 <ComboBox Margin="27 5" Width="200" Height="25" FontSize="12" HorizontalAlignment="Left"
                           ItemsSource="{Binding SettingsSubViewModel.General.AvailableLanguages}"
                           ItemsSource="{Binding SettingsSubViewModel.General.AvailableLanguages}"
                           SelectedItem="{Binding SettingsSubViewModel.General.SelectedLanguage, Mode=TwoWay}">
                           SelectedItem="{Binding SettingsSubViewModel.General.SelectedLanguage, Mode=TwoWay}">
@@ -107,53 +108,53 @@
                     </ComboBox.ItemContainerStyle>
                     </ComboBox.ItemContainerStyle>
                 </ComboBox>
                 </ComboBox>
 
 
-                <Label Style="{StaticResource SettingsHeader}" views:Translator.Key="MISC" d:Content="Misc"/>
+                <Label Style="{StaticResource SettingsHeader}" ui:Translator.Key="MISC" d:Content="Misc"/>
 
 
                 <CheckBox Margin="27 0"
                 <CheckBox Margin="27 0"
-                          VerticalAlignment="Center" views:Translator.Key="SHOW_STARTUP_WINDOW" d:Content="Show startup window"
+                          VerticalAlignment="Center" ui:Translator.Key="SHOW_STARTUP_WINDOW" d:Content="Show startup window"
                           IsChecked="{Binding SettingsSubViewModel.File.ShowStartupWindow}"/>
                           IsChecked="{Binding SettingsSubViewModel.File.ShowStartupWindow}"/>
 
 
                 <CheckBox Margin="27 10"
                 <CheckBox Margin="27 10"
-                          VerticalAlignment="Center" d:Content="Show image preview in taskbar" views:Translator.Key="SHOW_IMAGE_PREVIEW_TASKBAR"
+                          VerticalAlignment="Center" d:Content="Show image preview in taskbar" ui:Translator.Key="SHOW_IMAGE_PREVIEW_TASKBAR"
                           IsChecked="{Binding SettingsSubViewModel.General.ImagePreviewInTaskbar}"/>
                           IsChecked="{Binding SettingsSubViewModel.General.ImagePreviewInTaskbar}"/>
 
 
                 <StackPanel Margin="27 0" Orientation="Horizontal">
                 <StackPanel Margin="27 0" Orientation="Horizontal">
                 <Label Style="{StaticResource SettingsText}"
                 <Label Style="{StaticResource SettingsText}"
-                       views:Translator.Key="RECENT_FILE_LENGTH"
-                       views:Translator.TooltipKey="RECENT_FILE_LENGTH_TOOLTIP"/>
+                       ui:Translator.Key="RECENT_FILE_LENGTH"
+                       ui:Translator.TooltipKey="RECENT_FILE_LENGTH_TOOLTIP"/>
                     <usercontrols:NumberInput Margin="10 0 0 0" 
                     <usercontrols:NumberInput Margin="10 0 0 0" 
                                               Min="0" FontSize="12" HorizontalAlignment="Left"
                                               Min="0" FontSize="12" HorizontalAlignment="Left"
                                    Value="{Binding SettingsSubViewModel.File.MaxOpenedRecently, Mode=TwoWay}" Height="19" Width="40"/>
                                    Value="{Binding SettingsSubViewModel.File.MaxOpenedRecently, Mode=TwoWay}" Height="19" Width="40"/>
                 </StackPanel>
                 </StackPanel>
 
 
-                <Label Style="{StaticResource SettingsHeader}" d:Content="Default new file size" views:Translator.Key="DEFAULT_NEW_SIZE"/>
+                <Label Style="{StaticResource SettingsHeader}" d:Content="Default new file size" ui:Translator.Key="DEFAULT_NEW_SIZE"/>
 
 
                 <StackPanel Orientation="Horizontal" Margin="27 5">
                 <StackPanel Orientation="Horizontal" Margin="27 5">
-                    <Label Style="{StaticResource SettingsText}" d:Content="Width" views:Translator.Key="WIDTH"/>
+                    <Label Style="{StaticResource SettingsText}" d:Content="Width" ui:Translator.Key="WIDTH"/>
                     <usercontrols:SizeInput Margin="10 0 0 0" 
                     <usercontrols:SizeInput Margin="10 0 0 0" 
                                  Size="{Binding SettingsSubViewModel.File.DefaultNewFileWidth, Mode=TwoWay}" 
                                  Size="{Binding SettingsSubViewModel.File.DefaultNewFileWidth, Mode=TwoWay}" 
                                  Height="21" MaxSize="9999" HorizontalAlignment="Left"/>
                                  Height="21" MaxSize="9999" HorizontalAlignment="Left"/>
                 </StackPanel>
                 </StackPanel>
 
 
                 <StackPanel Orientation="Horizontal" Margin="27 5">
                 <StackPanel Orientation="Horizontal" Margin="27 5">
-                    <Label Style="{StaticResource SettingsText}" d:Content="Height" views:Translator.Key="HEIGHT"/> 
+                    <Label Style="{StaticResource SettingsText}" d:Content="Height" ui:Translator.Key="HEIGHT"/> 
                     <usercontrols:SizeInput Margin="7 0 0 0"
                     <usercontrols:SizeInput Margin="7 0 0 0"
                                  Size="{Binding SettingsSubViewModel.File.DefaultNewFileHeight, Mode=TwoWay}" 
                                  Size="{Binding SettingsSubViewModel.File.DefaultNewFileHeight, Mode=TwoWay}" 
                                  Height="21" MaxSize="9999" HorizontalAlignment="Left"/>
                                  Height="21" MaxSize="9999" HorizontalAlignment="Left"/>
                 </StackPanel>
                 </StackPanel>
 
 
-                <Label Style="{StaticResource SettingsHeader}" d:Content="Tools" views:Translator.Key="TOOLS"/>
+                <Label Style="{StaticResource SettingsHeader}" d:Content="Tools" ui:Translator.Key="TOOLS"/>
 
 
                 <CheckBox VerticalAlignment="Center" Margin="27 5"
                 <CheckBox VerticalAlignment="Center" Margin="27 5"
-                    IsChecked="{Binding SettingsSubViewModel.Tools.EnableSharedToolbar}" d:Content="Enable shared toolbar" views:Translator.Key="ENABLE_SHARED_TOOLBAR"/>
+                    IsChecked="{Binding SettingsSubViewModel.Tools.EnableSharedToolbar}" d:Content="Enable shared toolbar" ui:Translator.Key="ENABLE_SHARED_TOOLBAR"/>
 
 
-                <Label Style="{StaticResource SettingsHeader}" d:Content="Automatic updates" views:Translator.Key="AUTOMATIC_UPDATES"/>
+                <Label Style="{StaticResource SettingsHeader}" d:Content="Automatic updates" ui:Translator.Key="AUTOMATIC_UPDATES"/>
 
 
                 <CheckBox Margin="27 5" VerticalAlignment="Center" IsEnabled="{Binding Path=ShowUpdateTab}"
                 <CheckBox Margin="27 5" VerticalAlignment="Center" IsEnabled="{Binding Path=ShowUpdateTab}"
-                    IsChecked="{Binding SettingsSubViewModel.Update.CheckUpdatesOnStartup}" views:Translator.Key="CHECK_FOR_UPDATES" d:Content="Check updates on startup"/>
+                    IsChecked="{Binding SettingsSubViewModel.Update.CheckUpdatesOnStartup}" ui:Translator.Key="CHECK_FOR_UPDATES" d:Content="Check updates on startup"/>
 
 
                 <StackPanel Orientation="Horizontal" Margin="27 5">
                 <StackPanel Orientation="Horizontal" Margin="27 5">
-                    <Label Grid.Row="11" Grid.Column="1" Style="{StaticResource SettingsText}" d:Content="Update stream" views:Translator.Key="UPDATE_STREAM"/>
+                    <Label Grid.Row="11" Grid.Column="1" Style="{StaticResource SettingsText}" d:Content="Update stream" ui:Translator.Key="UPDATE_STREAM"/>
                     <StackPanel Margin="5 0" Orientation="Horizontal" VerticalAlignment="Center"
                     <StackPanel Margin="5 0" Orientation="Horizontal" VerticalAlignment="Center"
                             Height="21.96" HorizontalAlignment="Left">
                             Height="21.96" HorizontalAlignment="Left">
                 <ComboBox Width="110" IsEnabled="{Binding Path=ShowUpdateTab}"
                 <ComboBox Width="110" IsEnabled="{Binding Path=ShowUpdateTab}"
@@ -162,16 +163,16 @@
                 <Image Cursor="Help" Margin="10 0 0 0" Source="/Images/Commands/PixiEditor/Links/OpenDocumentation.png"
                 <Image Cursor="Help" Margin="10 0 0 0" Source="/Images/Commands/PixiEditor/Links/OpenDocumentation.png"
                        ToolTipService.InitialShowDelay="0"
                        ToolTipService.InitialShowDelay="0"
                        Visibility="{Binding Path=ShowUpdateTab, Converter={converters:InverseBoolToVisibilityConverter}}"
                        Visibility="{Binding Path=ShowUpdateTab, Converter={converters:InverseBoolToVisibilityConverter}}"
-                       views:Translator.TooltipKey="UPDATE_CHANNEL_HELP_TOOLTIP"/>
+                       ui:Translator.TooltipKey="UPDATE_CHANNEL_HELP_TOOLTIP"/>
                 </StackPanel>
                 </StackPanel>
                 </StackPanel>
                 </StackPanel>
 
 
-                <Label Style="{StaticResource SettingsHeader}" d:Content="Debug" views:Translator.Key="DEBUG"/>
+                <Label Style="{StaticResource SettingsHeader}" d:Content="Debug" ui:Translator.Key="DEBUG"/>
                 <CheckBox Margin="27 5" VerticalAlignment="Center"
                 <CheckBox Margin="27 5" VerticalAlignment="Center"
-                    IsChecked="{Binding SettingsSubViewModel.General.IsDebugModeEnabled}" views:Translator.Key="ENABLE_DEBUG_MODE" d:Content="Enable Debug Mode"/>
+                    IsChecked="{Binding SettingsSubViewModel.General.IsDebugModeEnabled}" ui:Translator.Key="ENABLE_DEBUG_MODE" d:Content="Enable Debug Mode"/>
                 <Label Margin="0 5" Style="{StaticResource SettingsText}" VerticalAlignment="Center">
                 <Label Margin="0 5" Style="{StaticResource SettingsText}" VerticalAlignment="Center">
                     <Hyperlink Command="{cmds:Command PixiEditor.Debug.OpenCrashReportsDirectory}" Style="{StaticResource SettingsLink}">
                     <Hyperlink Command="{cmds:Command PixiEditor.Debug.OpenCrashReportsDirectory}" Style="{StaticResource SettingsLink}">
-                        <Run views:Translator.Key="OPEN_CRASH_REPORTS_DIR" d:Text="Open crash reports directory"/>
+                        <Run ui:Translator.Key="OPEN_CRASH_REPORTS_DIR" d:Text="Open crash reports directory"/>
                         <Run Text="" FontFamily="{StaticResource Feather}"/>
                         <Run Text="" FontFamily="{StaticResource Feather}"/>
                     </Hyperlink>
                     </Hyperlink>
                 </Label>
                 </Label>
@@ -186,18 +187,18 @@
                     </Binding>
                     </Binding>
                 </StackPanel.Visibility>
                 </StackPanel.Visibility>
                 <StackPanel Orientation="Vertical">
                 <StackPanel Orientation="Vertical">
-                    <Label Style="{StaticResource SettingsHeader}" d:Content="Rich Presence" views:Translator.Key="DISCORD_RICH_PRESENCE"/>
+                    <Label Style="{StaticResource SettingsHeader}" d:Content="Rich Presence" ui:Translator.Key="DISCORD_RICH_PRESENCE"/>
 
 
                     <CheckBox Margin="27 5" VerticalAlignment="Center"
                     <CheckBox Margin="27 5" VerticalAlignment="Center"
-                              IsChecked="{Binding SettingsSubViewModel.Discord.EnableRichPresence}" d:Content="Enabled" views:Translator.Key="ENABLED"/>
+                              IsChecked="{Binding SettingsSubViewModel.Discord.EnableRichPresence}" d:Content="Enabled" ui:Translator.Key="ENABLED"/>
                     <CheckBox Margin="27 5" VerticalAlignment="Center"
                     <CheckBox Margin="27 5" VerticalAlignment="Center"
                               IsEnabled="{Binding SettingsSubViewModel.Discord.EnableRichPresence}" 
                               IsEnabled="{Binding SettingsSubViewModel.Discord.EnableRichPresence}" 
-                              IsChecked="{Binding SettingsSubViewModel.Discord.ShowDocumentName}" d:Content="Show image name" views:Translator.Key="SHOW_IMAGE_NAME"/>
+                              IsChecked="{Binding SettingsSubViewModel.Discord.ShowDocumentName}" d:Content="Show image name" ui:Translator.Key="SHOW_IMAGE_NAME"/>
                     <CheckBox Margin="27 5" VerticalAlignment="Center"
                     <CheckBox Margin="27 5" VerticalAlignment="Center"
-                              IsEnabled="{Binding SettingsSubViewModel.Discord.EnableRichPresence}" d:Content="Show image size" views:Translator.Key="SHOW_IMAGE_SIZE"
+                              IsEnabled="{Binding SettingsSubViewModel.Discord.EnableRichPresence}" d:Content="Show image size" ui:Translator.Key="SHOW_IMAGE_SIZE"
                               IsChecked="{Binding SettingsSubViewModel.Discord.ShowDocumentSize}"/>
                               IsChecked="{Binding SettingsSubViewModel.Discord.ShowDocumentSize}"/>
                     <CheckBox Margin="27 5" VerticalAlignment="Center"
                     <CheckBox Margin="27 5" VerticalAlignment="Center"
-                              IsEnabled="{Binding SettingsSubViewModel.Discord.EnableRichPresence}" views:Translator.Key="SHOW_LAYER_COUNT" d:Content="Show layer count"
+                              IsEnabled="{Binding SettingsSubViewModel.Discord.EnableRichPresence}" ui:Translator.Key="SHOW_LAYER_COUNT" d:Content="Show layer count"
                               IsChecked="{Binding SettingsSubViewModel.Discord.ShowLayerCount}"/>
                               IsChecked="{Binding SettingsSubViewModel.Discord.ShowLayerCount}"/>
                 </StackPanel>
                 </StackPanel>
                 <usercontrols:DiscordRPPreview 
                 <usercontrols:DiscordRPPreview 
@@ -234,13 +235,13 @@
                         </Style>
                         </Style>
                     </StackPanel.Resources>
                     </StackPanel.Resources>
                     <Button Command="{cmds:Command PixiEditor.Shortcuts.Export}"
                     <Button Command="{cmds:Command PixiEditor.Shortcuts.Export}"
-                            d:Content="Export" views:Translator.Key="EXPORT"/>
+                            d:Content="Export" ui:Translator.Key="EXPORT"/>
                     <Button Command="{cmds:Command PixiEditor.Shortcuts.Import}"
                     <Button Command="{cmds:Command PixiEditor.Shortcuts.Import}"
-                            d:Content="Import" views:Translator.Key="IMPORT"/>
+                            d:Content="Import" ui:Translator.Key="IMPORT"/>
                     <Button Command="{cmds:Command PixiEditor.Shortcuts.OpenTemplatePopup}"
                     <Button Command="{cmds:Command PixiEditor.Shortcuts.OpenTemplatePopup}"
-                            d:Content="Shortcut Templates" views:Translator.Key="SHORTCUT_TEMPLATES"/>
+                            d:Content="Shortcut Templates" ui:Translator.Key="SHORTCUT_TEMPLATES"/>
                     <Button Command="{cmds:Command PixiEditor.Shortcuts.Reset}"
                     <Button Command="{cmds:Command PixiEditor.Shortcuts.Reset}"
-                            d:Content="Reset all" views:Translator.Key="RESET_ALL"/>
+                            d:Content="Reset all" ui:Translator.Key="RESET_ALL"/>
                 </StackPanel>
                 </StackPanel>
                 <TextBox Grid.Row="1" Style="{StaticResource DarkTextBoxStyle}" Margin="0,10"
                 <TextBox Grid.Row="1" Style="{StaticResource DarkTextBoxStyle}" Margin="0,10"
                          Text="{Binding SearchTerm, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                          Text="{Binding SearchTerm, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

+ 5 - 4
src/PixiEditor/Views/Dialogs/ShortcutPopup.xaml

@@ -13,11 +13,12 @@
         xmlns:commands1="clr-namespace:PixiEditor.Models.Commands.Commands"
         xmlns:commands1="clr-namespace:PixiEditor.Models.Commands.Commands"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:views="clr-namespace:PixiEditor.Views"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
         xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+        xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
         mc:Ignorable="d"
         mc:Ignorable="d"
         WindowStartupLocation="CenterScreen"
         WindowStartupLocation="CenterScreen"
         SizeToContent="Height"
         SizeToContent="Height"
         WindowStyle="None"
         WindowStyle="None"
-        views:Translator.Key="SHORTCUTS_TITLE"
+        ui:Translator.Key="SHORTCUTS_TITLE"
         MinHeight="780" MinWidth="620" Topmost="{Binding IsTopmost}"
         MinHeight="780" MinWidth="620" Topmost="{Binding IsTopmost}"
         Width="950" MaxHeight="1000"
         Width="950" MaxHeight="1000"
         FlowDirection="{helpers:Localization FlowDirection}"
         FlowDirection="{helpers:Localization FlowDirection}"
@@ -83,7 +84,7 @@
                           WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Makes this window always on top"/>
                           WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Makes this window always on top"/>
         </DockPanel>
         </DockPanel>
 
 
-        <TextBlock Grid.Row="0" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Center" views:Translator.Key="SHORTCUTS_TITLE"/>
+        <TextBlock Grid.Row="0" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Center" ui:Translator.Key="SHORTCUTS_TITLE"/>
 
 
         <DockPanel Grid.Row="3">
         <DockPanel Grid.Row="3">
             <TextBlock FontSize="14" Margin="10" Foreground="LightGray" HorizontalAlignment="Left" DockPanel.Dock="Bottom">
             <TextBlock FontSize="14" Margin="10" Foreground="LightGray" HorizontalAlignment="Left" DockPanel.Dock="Bottom">
@@ -92,7 +93,7 @@
                     <Hyperlink.CommandParameter>
                     <Hyperlink.CommandParameter>
                         <s:Int32>2</s:Int32>
                         <s:Int32>2</s:Int32>
                     </Hyperlink.CommandParameter>
                     </Hyperlink.CommandParameter>
-                    <Run views:Translator.Key="EDIT"/>
+                    <Run ui:Translator.Key="EDIT"/>
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                     <Run Text="" FontFamily="{StaticResource Feather}"/>
                 </Hyperlink>
                 </Hyperlink>
             </TextBlock>
             </TextBlock>
@@ -112,7 +113,7 @@
                                                         <ItemsControl.ItemTemplate>
                                                         <ItemsControl.ItemTemplate>
                                                             <DataTemplate DataType="{x:Type ModifierKeys}">
                                                             <DataTemplate DataType="{x:Type ModifierKeys}">
                                                                 <Border Style="{StaticResource KeyBorder}">
                                                                 <Border Style="{StaticResource KeyBorder}">
-                                                                    <TextBlock views:Translator.LocalizedString="{Binding BindsDirectlyToSource=True, Converter={converters:KeyToStringConverter}}" Style="{StaticResource KeyBorderText}"/>
+                                                                    <TextBlock ui:Translator.LocalizedString="{Binding BindsDirectlyToSource=True, Converter={converters:KeyToStringConverter}}" Style="{StaticResource KeyBorderText}"/>
                                                                 </Border>
                                                                 </Border>
                                                             </DataTemplate>
                                                             </DataTemplate>
                                                         </ItemsControl.ItemTemplate>
                                                         </ItemsControl.ItemTemplate>

+ 105 - 104
src/PixiEditor/Views/MainWindow.xaml

@@ -28,6 +28,7 @@
     xmlns:views="clr-namespace:PixiEditor.Views"
     xmlns:views="clr-namespace:PixiEditor.Views"
     xmlns:system="clr-namespace:System;assembly=System.Runtime"
     xmlns:system="clr-namespace:System;assembly=System.Runtime"
     xmlns:helpers="clr-namespace:PixiEditor.Helpers"
     xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+    xmlns:ui1="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
     KeyDown="MainWindow_OnKeyDown"
     KeyDown="MainWindow_OnKeyDown"
     d:DataContext="{d:DesignInstance Type=vm:ViewModelMain}"
     d:DataContext="{d:DesignInstance Type=vm:ViewModelMain}"
     mc:Ignorable="d"
     mc:Ignorable="d"
@@ -152,16 +153,16 @@
                             BasedOn="{StaticResource menuItemStyle}" />
                             BasedOn="{StaticResource menuItemStyle}" />
                     </Menu.Resources>
                     </Menu.Resources>
                     <MenuItem
                     <MenuItem
-                        views:Translator.Key="FILE"
+                        ui1:Translator.Key="FILE"
                         Focusable="False">
                         Focusable="False">
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="NEW_FILE"
+                            ui1:Translator.Key="NEW_FILE"
                             cmds:Menu.Command="PixiEditor.File.New" />
                             cmds:Menu.Command="PixiEditor.File.New" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN"
+                            ui1:Translator.Key="OPEN"
                             cmds:Menu.Command="PixiEditor.File.Open" />
                             cmds:Menu.Command="PixiEditor.File.Open" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="RECENT"
+                            ui1:Translator.Key="RECENT"
                             ItemsSource="{Binding FileSubViewModel.RecentlyOpened}"
                             ItemsSource="{Binding FileSubViewModel.RecentlyOpened}"
                             x:Name="recentItemMenu"
                             x:Name="recentItemMenu"
                             IsEnabled="{Binding FileSubViewModel.HasRecent}">
                             IsEnabled="{Binding FileSubViewModel.HasRecent}">
@@ -198,17 +199,17 @@
                         </MenuItem>
                         </MenuItem>
                         <MenuItem
                         <MenuItem
                             Focusable="False"
                             Focusable="False"
-                            views:Translator.Key="SAVE_PIXI"
+                            ui1:Translator.Key="SAVE_PIXI"
                             cmds:Menu.Command="PixiEditor.File.Save" />
                             cmds:Menu.Command="PixiEditor.File.Save" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="SAVE_AS_PIXI"
+                            ui1:Translator.Key="SAVE_AS_PIXI"
                             cmds:Menu.Command="PixiEditor.File.SaveAsNew" />
                             cmds:Menu.Command="PixiEditor.File.SaveAsNew" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="EXPORT_IMG"
+                            ui1:Translator.Key="EXPORT_IMG"
                             cmds:Menu.Command="PixiEditor.File.Export" />
                             cmds:Menu.Command="PixiEditor.File.Export" />
                         <Separator />
                         <Separator />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="EXIT"
+                            ui1:Translator.Key="EXIT"
                             Command="{x:Static SystemCommands.CloseWindowCommand}">
                             Command="{x:Static SystemCommands.CloseWindowCommand}">
                             <MenuItem.Icon>
                             <MenuItem.Icon>
                                 <TextBlock Text="&#xE106;" FontFamily="{DynamicResource NativeIconFont}" FontSize="20"/>
                                 <TextBlock Text="&#xE106;" FontFamily="{DynamicResource NativeIconFont}" FontSize="20"/>
@@ -217,85 +218,85 @@
                     </MenuItem>
                     </MenuItem>
                     <MenuItem
                     <MenuItem
                         Focusable="False"
                         Focusable="False"
-                        views:Translator.Key="EDIT">
+                        ui1:Translator.Key="EDIT">
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="UNDO"
+                            ui1:Translator.Key="UNDO"
                             cmds:Menu.Command="PixiEditor.Undo.Undo" />
                             cmds:Menu.Command="PixiEditor.Undo.Undo" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="REDO"
+                            ui1:Translator.Key="REDO"
                             cmds:Menu.Command="PixiEditor.Undo.Redo" />
                             cmds:Menu.Command="PixiEditor.Undo.Redo" />
                         <Separator />
                         <Separator />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="CUT"
+                            ui1:Translator.Key="CUT"
                             cmds:Menu.Command="PixiEditor.Clipboard.Cut" />
                             cmds:Menu.Command="PixiEditor.Clipboard.Cut" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="COPY"
+                            ui1:Translator.Key="COPY"
                             cmds:Menu.Command="PixiEditor.Clipboard.Copy" />
                             cmds:Menu.Command="PixiEditor.Clipboard.Copy" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="PASTE"
+                            ui1:Translator.Key="PASTE"
                             cmds:Menu.Command="PixiEditor.Clipboard.Paste" />
                             cmds:Menu.Command="PixiEditor.Clipboard.Paste" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="DUPLICATE"
+                            ui1:Translator.Key="DUPLICATE"
                             cmds:Menu.Command="PixiEditor.Layer.DuplicateSelectedLayer" />
                             cmds:Menu.Command="PixiEditor.Layer.DuplicateSelectedLayer" />
                         <Separator />
                         <Separator />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="DELETE_SELECTED_PIXELS"
+                            ui1:Translator.Key="DELETE_SELECTED_PIXELS"
                             cmds:Menu.Command="PixiEditor.Document.DeletePixels" />
                             cmds:Menu.Command="PixiEditor.Document.DeletePixels" />
                         <Separator />
                         <Separator />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="SETTINGS"
+                            ui1:Translator.Key="SETTINGS"
                             cmds:Menu.Command="PixiEditor.Window.OpenSettingsWindow" />
                             cmds:Menu.Command="PixiEditor.Window.OpenSettingsWindow" />
                     </MenuItem>
                     </MenuItem>
                     <MenuItem
                     <MenuItem
                         Focusable="False"
                         Focusable="False"
-                        views:Translator.Key="SELECT">
+                        ui1:Translator.Key="SELECT">
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="SELECT_ALL"
+                            ui1:Translator.Key="SELECT_ALL"
                             cmds:Menu.Command="PixiEditor.Selection.SelectAll" />
                             cmds:Menu.Command="PixiEditor.Selection.SelectAll" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="DESELECT"
+                            ui1:Translator.Key="DESELECT"
                             cmds:Menu.Command="PixiEditor.Selection.Clear" />
                             cmds:Menu.Command="PixiEditor.Selection.Clear" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="INVERT"
+                            ui1:Translator.Key="INVERT"
                             cmds:Menu.Command="PixiEditor.Selection.InvertSelection" />
                             cmds:Menu.Command="PixiEditor.Selection.InvertSelection" />
                         <Separator/>
                         <Separator/>
-                        <MenuItem views:Translator.Key="SELECTION_TO_MASK">
+                        <MenuItem ui1:Translator.Key="SELECTION_TO_MASK">
                             <MenuItem
                             <MenuItem
-                                views:Translator.Key="TO_NEW_MASK"
+                                ui1:Translator.Key="TO_NEW_MASK"
                                 cmds:Menu.Command="PixiEditor.Selection.NewToMask" />
                                 cmds:Menu.Command="PixiEditor.Selection.NewToMask" />
                             <MenuItem
                             <MenuItem
-                                views:Translator.Key="ADD_TO_MASK"
+                                ui1:Translator.Key="ADD_TO_MASK"
                                 cmds:Menu.Command="PixiEditor.Selection.AddToMask" />
                                 cmds:Menu.Command="PixiEditor.Selection.AddToMask" />
                             <MenuItem
                             <MenuItem
-                                views:Translator.Key="SUBTRACT_FROM_MASK"
+                                ui1:Translator.Key="SUBTRACT_FROM_MASK"
                                 cmds:Menu.Command="PixiEditor.Selection.SubtractFromMask" />
                                 cmds:Menu.Command="PixiEditor.Selection.SubtractFromMask" />
                             <MenuItem
                             <MenuItem
-                                views:Translator.Key="INTERSECT_WITH_MASK"
+                                ui1:Translator.Key="INTERSECT_WITH_MASK"
                                 cmds:Menu.Command="PixiEditor.Selection.IntersectSelectionMask" />
                                 cmds:Menu.Command="PixiEditor.Selection.IntersectSelectionMask" />
                         </MenuItem>
                         </MenuItem>
                     </MenuItem>
                     </MenuItem>
                     <MenuItem
                     <MenuItem
                         Focusable="False"
                         Focusable="False"
-                        views:Translator.Key="IMAGE">
+                        ui1:Translator.Key="IMAGE">
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="RESIZE_IMAGE"
+                            ui1:Translator.Key="RESIZE_IMAGE"
                             cmds:Menu.Command="PixiEditor.Document.ResizeDocument" />
                             cmds:Menu.Command="PixiEditor.Document.ResizeDocument" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="RESIZE_CANVAS"
+                            ui1:Translator.Key="RESIZE_CANVAS"
                             cmds:Menu.Command="PixiEditor.Document.ResizeCanvas" />
                             cmds:Menu.Command="PixiEditor.Document.ResizeCanvas" />
                         <Separator />
                         <Separator />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="CLIP_CANVAS"
+                            ui1:Translator.Key="CLIP_CANVAS"
                             cmds:Menu.Command="PixiEditor.Document.ClipCanvas" />
                             cmds:Menu.Command="PixiEditor.Document.ClipCanvas" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="CENTER_CONTENT"
+                            ui1:Translator.Key="CENTER_CONTENT"
                             cmds:Menu.Command="PixiEditor.Document.CenterContent" />
                             cmds:Menu.Command="PixiEditor.Document.CenterContent" />
                         <Separator />
                         <Separator />
                         <MenuItem
                         <MenuItem
                             IsCheckable="True"
                             IsCheckable="True"
                             IsEnabled="{Binding DocumentManagerSubViewModel.ActiveDocument, Source={vm:MainVM}, Converter={converters:NotNullToBoolConverter}}"
                             IsEnabled="{Binding DocumentManagerSubViewModel.ActiveDocument, Source={vm:MainVM}, Converter={converters:NotNullToBoolConverter}}"
                             IsChecked="{Binding DocumentManagerSubViewModel.ActiveDocument.HorizontalSymmetryAxisEnabledBindable}"
                             IsChecked="{Binding DocumentManagerSubViewModel.ActiveDocument.HorizontalSymmetryAxisEnabledBindable}"
-                            views:Translator.Key="HORIZONTAL_LINE_SYMMETRY">
+                            ui1:Translator.Key="HORIZONTAL_LINE_SYMMETRY">
                             <MenuItem.Icon>
                             <MenuItem.Icon>
                                 <Image Source="../Images/SymmetryHorizontal.png"
                                 <Image Source="../Images/SymmetryHorizontal.png"
                                        Width="{x:Static cmds:Menu.IconDimensions}" Height="{x:Static cmds:Menu.IconDimensions}"/>
                                        Width="{x:Static cmds:Menu.IconDimensions}" Height="{x:Static cmds:Menu.IconDimensions}"/>
@@ -305,50 +306,50 @@
                             IsCheckable="True"
                             IsCheckable="True"
                             IsEnabled="{Binding DocumentManagerSubViewModel.ActiveDocument, Source={vm:MainVM}, Converter={converters:NotNullToBoolConverter}}"
                             IsEnabled="{Binding DocumentManagerSubViewModel.ActiveDocument, Source={vm:MainVM}, Converter={converters:NotNullToBoolConverter}}"
                             IsChecked="{Binding DocumentManagerSubViewModel.ActiveDocument.VerticalSymmetryAxisEnabledBindable}"
                             IsChecked="{Binding DocumentManagerSubViewModel.ActiveDocument.VerticalSymmetryAxisEnabledBindable}"
-                            views:Translator.Key="VERTICAL_LINE_SYMMETRY">
+                            ui1:Translator.Key="VERTICAL_LINE_SYMMETRY">
                             <MenuItem.Icon>
                             <MenuItem.Icon>
                                 <Image Source="../Images/SymmetryVertical.png"
                                 <Image Source="../Images/SymmetryVertical.png"
                                        Width="{x:Static cmds:Menu.IconDimensions}" Height="{x:Static cmds:Menu.IconDimensions}"/>
                                        Width="{x:Static cmds:Menu.IconDimensions}" Height="{x:Static cmds:Menu.IconDimensions}"/>
                             </MenuItem.Icon>
                             </MenuItem.Icon>
                         </MenuItem>
                         </MenuItem>
                         <Separator/>
                         <Separator/>
-                        <MenuItem views:Translator.Key="ROTATION">
-                            <MenuItem views:Translator.Key="ROT_IMG_90_D" cmds:Menu.Command="PixiEditor.Document.Rotate90Deg"/>
-                            <MenuItem views:Translator.Key="ROT_IMG_180_D" cmds:Menu.Command="PixiEditor.Document.Rotate180Deg"/>
-                            <MenuItem views:Translator.Key="ROT_IMG_-90_D" cmds:Menu.Command="PixiEditor.Document.Rotate270Deg"/>
+                        <MenuItem ui1:Translator.Key="ROTATION">
+                            <MenuItem ui1:Translator.Key="ROT_IMG_90_D" cmds:Menu.Command="PixiEditor.Document.Rotate90Deg"/>
+                            <MenuItem ui1:Translator.Key="ROT_IMG_180_D" cmds:Menu.Command="PixiEditor.Document.Rotate180Deg"/>
+                            <MenuItem ui1:Translator.Key="ROT_IMG_-90_D" cmds:Menu.Command="PixiEditor.Document.Rotate270Deg"/>
                             
                             
                             <Separator/>
                             <Separator/>
-                            <MenuItem views:Translator.Key="ROT_LAYERS_90_D" cmds:Menu.Command="PixiEditor.Document.Rotate90DegLayers"/>
-                            <MenuItem views:Translator.Key="ROT_LAYERS_180_D" cmds:Menu.Command="PixiEditor.Document.Rotate180DegLayers"/>
-                            <MenuItem views:Translator.Key="ROT_LAYERS_-90_D" cmds:Menu.Command="PixiEditor.Document.Rotate270DegLayers"/>
+                            <MenuItem ui1:Translator.Key="ROT_LAYERS_90_D" cmds:Menu.Command="PixiEditor.Document.Rotate90DegLayers"/>
+                            <MenuItem ui1:Translator.Key="ROT_LAYERS_180_D" cmds:Menu.Command="PixiEditor.Document.Rotate180DegLayers"/>
+                            <MenuItem ui1:Translator.Key="ROT_LAYERS_-90_D" cmds:Menu.Command="PixiEditor.Document.Rotate270DegLayers"/>
                         </MenuItem>
                         </MenuItem>
-                        <MenuItem views:Translator.Key="FLIP">
-                            <MenuItem views:Translator.Key="FLIP_IMG_HORIZONTALLY" cmds:Menu.Command="PixiEditor.Document.FlipImageHorizontal"/>
-                            <MenuItem views:Translator.Key="FLIP_IMG_VERTICALLY" cmds:Menu.Command="PixiEditor.Document.FlipImageVertical"/>
-                            <MenuItem views:Translator.Key="FLIP_LAYERS_HORIZONTALLY" cmds:Menu.Command="PixiEditor.Document.FlipLayersHorizontal"/>
-                            <MenuItem views:Translator.Key="FLIP_LAYERS_VERTICALLY" cmds:Menu.Command="PixiEditor.Document.FlipLayersVertical"/>
+                        <MenuItem ui1:Translator.Key="FLIP">
+                            <MenuItem ui1:Translator.Key="FLIP_IMG_HORIZONTALLY" cmds:Menu.Command="PixiEditor.Document.FlipImageHorizontal"/>
+                            <MenuItem ui1:Translator.Key="FLIP_IMG_VERTICALLY" cmds:Menu.Command="PixiEditor.Document.FlipImageVertical"/>
+                            <MenuItem ui1:Translator.Key="FLIP_LAYERS_HORIZONTALLY" cmds:Menu.Command="PixiEditor.Document.FlipLayersHorizontal"/>
+                            <MenuItem ui1:Translator.Key="FLIP_LAYERS_VERTICALLY" cmds:Menu.Command="PixiEditor.Document.FlipLayersVertical"/>
                         </MenuItem>
                         </MenuItem>
                     </MenuItem>
                     </MenuItem>
                     <MenuItem
                     <MenuItem
                         Focusable="False"
                         Focusable="False"
-                        views:Translator.Key="VIEW">
+                        ui1:Translator.Key="VIEW">
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="NEW_WINDOW_FOR_IMG"
+                            ui1:Translator.Key="NEW_WINDOW_FOR_IMG"
                             cmds:Menu.Command="PixiEditor.Window.CreateNewViewport" />
                             cmds:Menu.Command="PixiEditor.Window.CreateNewViewport" />
                         <Separator/>
                         <Separator/>
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_STARTUP_WINDOW"
+                            ui1:Translator.Key="OPEN_STARTUP_WINDOW"
                             ToolTip="Hello there!"
                             ToolTip="Hello there!"
                             cmds:Menu.Command="PixiEditor.Window.OpenStartupWindow" />
                             cmds:Menu.Command="PixiEditor.Window.OpenStartupWindow" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_NAVIGATION_WINDOW"
+                            ui1:Translator.Key="OPEN_NAVIGATION_WINDOW"
                             cmds:Menu.Command="PixiEditor.Window.OpenNavigationWindow" />
                             cmds:Menu.Command="PixiEditor.Window.OpenNavigationWindow" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_SHORTCUT_WINDOW"
+                            ui1:Translator.Key="OPEN_SHORTCUT_WINDOW"
                             cmds:Menu.Command="PixiEditor.Window.OpenShortcutWindow" />
                             cmds:Menu.Command="PixiEditor.Window.OpenShortcutWindow" />
                         <Separator/>
                         <Separator/>
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="TOGGLE_GRIDLINES"
+                            ui1:Translator.Key="TOGGLE_GRIDLINES"
                             IsChecked="{Binding ViewportSubViewModel.GridLinesEnabled, Mode=TwoWay}"
                             IsChecked="{Binding ViewportSubViewModel.GridLinesEnabled, Mode=TwoWay}"
                             IsCheckable="True"
                             IsCheckable="True"
                             InputGestureText="{cmds:ShortcutBinding PixiEditor.View.ToggleGrid}">
                             InputGestureText="{cmds:ShortcutBinding PixiEditor.View.ToggleGrid}">
@@ -360,71 +361,71 @@
                     </MenuItem>
                     </MenuItem>
                     <MenuItem
                     <MenuItem
                         Focusable="False"
                         Focusable="False"
-                        views:Translator.Key="HELP">
+                        ui1:Translator.Key="HELP">
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="DOCUMENTATION"
+                            ui1:Translator.Key="DOCUMENTATION"
                             cmds:Menu.Command="PixiEditor.Links.OpenDocumentation" />
                             cmds:Menu.Command="PixiEditor.Links.OpenDocumentation" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="WEBSITE"
+                            ui1:Translator.Key="WEBSITE"
                             cmds:Menu.Command="PixiEditor.Links.OpenWebsite" />
                             cmds:Menu.Command="PixiEditor.Links.OpenWebsite" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="REPOSITORY"
+                            ui1:Translator.Key="REPOSITORY"
                             cmds:Menu.Command="PixiEditor.Links.OpenRepository" />
                             cmds:Menu.Command="PixiEditor.Links.OpenRepository" />
                         <Separator />
                         <Separator />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="LICENSE"
+                            ui1:Translator.Key="LICENSE"
                             cmds:Menu.Command="PixiEditor.Links.OpenLicense" />
                             cmds:Menu.Command="PixiEditor.Links.OpenLicense" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="THIRD_PARTY_LICENSES"
+                            ui1:Translator.Key="THIRD_PARTY_LICENSES"
                             cmds:Menu.Command="PixiEditor.Links.OpenOtherLicenses" />
                             cmds:Menu.Command="PixiEditor.Links.OpenOtherLicenses" />
                         <Separator/>
                         <Separator/>
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="ABOUT"
+                            ui1:Translator.Key="ABOUT"
                             cmds:Menu.Command="PixiEditor.Window.OpenAboutWindow" />
                             cmds:Menu.Command="PixiEditor.Window.OpenAboutWindow" />
                     </MenuItem>
                     </MenuItem>
                     <MenuItem
                     <MenuItem
-                        views:Translator.Key="DEBUG"
+                        ui1:Translator.Key="DEBUG"
                         Visibility="{Binding DebugSubViewModel.UseDebug, Converter={StaticResource BoolToVisibilityConverter}}">
                         Visibility="{Binding DebugSubViewModel.UseDebug, Converter={StaticResource BoolToVisibilityConverter}}">
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_COMMAND_DEBUG_WINDOW"
+                            ui1:Translator.Key="OPEN_COMMAND_DEBUG_WINDOW"
                             cmds:Menu.Command="PixiEditor.Debug.OpenCommandDebugWindow"/>
                             cmds:Menu.Command="PixiEditor.Debug.OpenCommandDebugWindow"/>
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_LOCALIZATION_DEBUG_WINDOW"
+                            ui1:Translator.Key="OPEN_LOCALIZATION_DEBUG_WINDOW"
                             cmds:Menu.Command="PixiEditor.Debug.OpenLocalizationDebugWindow"/>
                             cmds:Menu.Command="PixiEditor.Debug.OpenLocalizationDebugWindow"/>
                         <Separator/>
                         <Separator/>
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_LOCAL_APPDATA_DIR"
+                            ui1:Translator.Key="OPEN_LOCAL_APPDATA_DIR"
                             cmds:Menu.Command="PixiEditor.Debug.OpenLocalAppDataDirectory" />
                             cmds:Menu.Command="PixiEditor.Debug.OpenLocalAppDataDirectory" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_ROAMING_APPDATA_DIR"
+                            ui1:Translator.Key="OPEN_ROAMING_APPDATA_DIR"
                             cmds:Menu.Command="PixiEditor.Debug.OpenRoamingAppDataDirectory" />
                             cmds:Menu.Command="PixiEditor.Debug.OpenRoamingAppDataDirectory" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_TEMP_DIR"
+                            ui1:Translator.Key="OPEN_TEMP_DIR"
                             cmds:Menu.Command="PixiEditor.Debug.OpenTempDirectory" />
                             cmds:Menu.Command="PixiEditor.Debug.OpenTempDirectory" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_INSTALLATION_DIR"
+                            ui1:Translator.Key="OPEN_INSTALLATION_DIR"
                             cmds:Menu.Command="PixiEditor.Debug.OpenInstallDirectory" />
                             cmds:Menu.Command="PixiEditor.Debug.OpenInstallDirectory" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="OPEN_CRASH_REPORTS_DIR"
+                            ui1:Translator.Key="OPEN_CRASH_REPORTS_DIR"
                             cmds:Menu.Command="PixiEditor.Debug.OpenCrashReportsDirectory" />
                             cmds:Menu.Command="PixiEditor.Debug.OpenCrashReportsDirectory" />
                         <Separator />
                         <Separator />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="CRASH"
+                            ui1:Translator.Key="CRASH"
                             cmds:Menu.Command="PixiEditor.Debug.Crash" />
                             cmds:Menu.Command="PixiEditor.Debug.Crash" />
                         <MenuItem
                         <MenuItem
-                            views:Translator.Key="DELETE">
+                            ui1:Translator.Key="DELETE">
                             <MenuItem
                             <MenuItem
-                                views:Translator.Key="USER_PREFS"
+                                ui1:Translator.Key="USER_PREFS"
                                 cmds:Menu.Command="PixiEditor.Debug.DeleteUserPreferences" />
                                 cmds:Menu.Command="PixiEditor.Debug.DeleteUserPreferences" />
                             <MenuItem
                             <MenuItem
-                                views:Translator.Key="SHORTCUT_FILE"
+                                ui1:Translator.Key="SHORTCUT_FILE"
                                 cmds:Menu.Command="PixiEditor.Debug.DeleteShortcutFile" />
                                 cmds:Menu.Command="PixiEditor.Debug.DeleteShortcutFile" />
                             <MenuItem
                             <MenuItem
-                                views:Translator.Key="EDITOR_DATA"
+                                ui1:Translator.Key="EDITOR_DATA"
                                 cmds:Menu.Command="PixiEditor.Debug.DeleteEditorData" />
                                 cmds:Menu.Command="PixiEditor.Debug.DeleteEditorData" />
                             <Separator/>
                             <Separator/>
                             <MenuItem
                             <MenuItem
-                                views:Translator.Key="CLEAR_RECENT_DOCUMENTS"
+                                ui1:Translator.Key="CLEAR_RECENT_DOCUMENTS"
                                 cmds:Menu.Command="PixiEditor.Debug.ClearRecentDocument"/>
                                 cmds:Menu.Command="PixiEditor.Debug.ClearRecentDocument"/>
                         </MenuItem>
                         </MenuItem>
                     </MenuItem>
                     </MenuItem>
@@ -455,7 +456,7 @@
                         </b:EventTrigger>
                         </b:EventTrigger>
                     </b:Interaction.Triggers>
                     </b:Interaction.Triggers>
                     <Grid Margin="5,0" VerticalAlignment="Center">
                     <Grid Margin="5,0" VerticalAlignment="Center">
-                        <TextBlock Foreground="White" views:Translator.Key="SEARCH"/>
+                        <TextBlock Foreground="White" ui1:Translator.Key="SEARCH"/>
                         <TextBlock Text="{cmds:ShortcutBinding PixiEditor.Search.Toggle}"
                         <TextBlock Text="{cmds:ShortcutBinding PixiEditor.Search.Toggle}"
                                    HorizontalAlignment="Right"
                                    HorizontalAlignment="Right"
                                    Foreground="White"/>
                                    Foreground="White"/>
@@ -474,7 +475,7 @@
                     <Button
                     <Button
                         Style="{StaticResource MinimizeButtonStyle}"
                         Style="{StaticResource MinimizeButtonStyle}"
                         WindowChrome.IsHitTestVisibleInChrome="True"
                         WindowChrome.IsHitTestVisibleInChrome="True"
-                        views:Translator.TooltipKey="MINIMIZE"
+                        ui1:Translator.TooltipKey="MINIMIZE"
                         Command="{x:Static SystemCommands.MinimizeWindowCommand}" />
                         Command="{x:Static SystemCommands.MinimizeWindowCommand}" />
                     <Button
                     <Button
                         x:Name="RestoreButton"
                         x:Name="RestoreButton"
@@ -482,18 +483,18 @@
                         Style="{StaticResource RestoreButtonStyle}"
                         Style="{StaticResource RestoreButtonStyle}"
                         Command="{x:Static SystemCommands.RestoreWindowCommand}"
                         Command="{x:Static SystemCommands.RestoreWindowCommand}"
                         WindowChrome.IsHitTestVisibleInChrome="True"
                         WindowChrome.IsHitTestVisibleInChrome="True"
-                        views:Translator.TooltipKey="RESTORE" />
+                        ui1:Translator.TooltipKey="RESTORE" />
                     <Button
                     <Button
                         x:Name="MaximizeButton"
                         x:Name="MaximizeButton"
                         Visibility="Collapsed"
                         Visibility="Collapsed"
                         Style="{StaticResource MaximizeButtonStyle}"
                         Style="{StaticResource MaximizeButtonStyle}"
                         Command="{x:Static SystemCommands.MaximizeWindowCommand}"
                         Command="{x:Static SystemCommands.MaximizeWindowCommand}"
                         WindowChrome.IsHitTestVisibleInChrome="True"
                         WindowChrome.IsHitTestVisibleInChrome="True"
-                        views:Translator.TooltipKey="MAXIMIZE" />
+                        ui1:Translator.TooltipKey="MAXIMIZE" />
                     <Button
                     <Button
                         Style="{StaticResource CloseButtonStyle}"
                         Style="{StaticResource CloseButtonStyle}"
                         WindowChrome.IsHitTestVisibleInChrome="True"
                         WindowChrome.IsHitTestVisibleInChrome="True"
-                        views:Translator.TooltipKey="CLOSE"
+                        ui1:Translator.TooltipKey="CLOSE"
                         Command="{x:Static SystemCommands.CloseWindowCommand}" />
                         Command="{x:Static SystemCommands.CloseWindowCommand}" />
                 </StackPanel>
                 </StackPanel>
             </DockPanel>
             </DockPanel>
@@ -506,18 +507,18 @@
                 <Button
                 <Button
                     Margin="1,0,0,0"
                     Margin="1,0,0,0"
                     Command="{cmds:Command PixiEditor.Undo.Undo}"
                     Command="{cmds:Command PixiEditor.Undo.Undo}"
-                    views:Translator.TooltipKey="UNDO"
+                    ui1:Translator.TooltipKey="UNDO"
                     Style="{StaticResource ToolSettingsGlyphButton}" 
                     Style="{StaticResource ToolSettingsGlyphButton}" 
 					Content="&#xE7A7;"/>
 					Content="&#xE7A7;"/>
                 <Button 
                 <Button 
 				Command="{cmds:Command PixiEditor.Undo.Redo}" 
 				Command="{cmds:Command PixiEditor.Undo.Redo}" 
-				views:Translator.TooltipKey="REDO"
+				ui1:Translator.TooltipKey="REDO"
                 Style="{StaticResource ToolSettingsGlyphButton}" 
                 Style="{StaticResource ToolSettingsGlyphButton}" 
 				Content="&#xE7A6;"/>
 				Content="&#xE7A6;"/>
                 <ToggleButton 
                 <ToggleButton 
 				Width="30" 
 				Width="30" 
 				BorderThickness="0"
 				BorderThickness="0"
-				views:Translator.TooltipKey="PEN_MODE"
+				ui1:Translator.TooltipKey="PEN_MODE"
 				Focusable="False"
 				Focusable="False"
                 IsChecked="{Binding StylusSubViewModel.IsPenModeEnabled}">
                 IsChecked="{Binding StylusSubViewModel.IsPenModeEnabled}">
                     <ToggleButton.Style>
                     <ToggleButton.Style>
@@ -550,8 +551,8 @@
                 </ToggleButton>
                 </ToggleButton>
                 <Grid Margin="5,5,10,5" Background="{StaticResource BrighterAccentColor}" Width="5"/>
                 <Grid Margin="5,5,10,5" Background="{StaticResource BrighterAccentColor}" Width="5"/>
                 <Label Style="{StaticResource BaseLabel}" FontSize="12"
                 <Label Style="{StaticResource BaseLabel}" FontSize="12"
-                   VerticalAlignment="Center" views:Translator.Key="{Binding ToolsSubViewModel.ActiveTool.DisplayName.Key}"
-                   views:Translator.TooltipLocalizedString="{Binding ToolsSubViewModel.ActiveTool.ActionDisplay}"
+                   VerticalAlignment="Center" ui1:Translator.Key="{Binding ToolsSubViewModel.ActiveTool.DisplayName.Key}"
+                   ui1:Translator.TooltipLocalizedString="{Binding ToolsSubViewModel.ActiveTool.ActionDisplay}"
                    />
                    />
                 <ItemsControl ItemsSource="{Binding ToolsSubViewModel.ActiveTool.Toolbar.Settings}">
                 <ItemsControl ItemsSource="{Binding ToolsSubViewModel.ActiveTool.Toolbar.Settings}">
                     <ItemsControl.ItemsPanel>
                     <ItemsControl.ItemsPanel>
@@ -564,7 +565,7 @@
                             <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="10,0,10,0">
                             <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="10,0,10,0">
                                 <Label
                                 <Label
                                 Visibility="{Binding HasLabel, Converter={StaticResource BoolToVisibilityConverter}}"
                                 Visibility="{Binding HasLabel, Converter={StaticResource BoolToVisibilityConverter}}"
-                                Foreground="White" views:Translator.Key="{Binding Label.Key}" />
+                                Foreground="White" ui1:Translator.Key="{Binding Label.Key}" />
                                 <ContentControl Content="{Binding SettingControl}" />
                                 <ContentControl Content="{Binding SettingControl}" />
                             </StackPanel>
                             </StackPanel>
                         </DataTemplate>
                         </DataTemplate>
@@ -639,28 +640,28 @@
                                                                     <Border Grid.Column="1" BorderThickness="0 0 1 0" BorderBrush="Black">
                                                                     <Border Grid.Column="1" BorderThickness="0 0 1 0" BorderBrush="Black">
                                                                         <StackPanel Orientation="Vertical" Grid.Column="0">
                                                                         <StackPanel Orientation="Vertical" Grid.Column="0">
                                                                             <MenuItem
                                                                             <MenuItem
-																		views:Translator.Key="SELECT_ALL"
+																		ui1:Translator.Key="SELECT_ALL"
 																		cmds:ContextMenu.Command="PixiEditor.Selection.SelectAll" />
 																		cmds:ContextMenu.Command="PixiEditor.Selection.SelectAll" />
                                                                             <MenuItem
                                                                             <MenuItem
-                                                                                views:Translator.Key="DESELECT"
+                                                                                ui1:Translator.Key="DESELECT"
 																		cmds:ContextMenu.Command="PixiEditor.Selection.Clear" />
 																		cmds:ContextMenu.Command="PixiEditor.Selection.Clear" />
                                                                             <Separator />
                                                                             <Separator />
                                                                             <MenuItem
                                                                             <MenuItem
-                                                                                views:Translator.Key="CUT"
+                                                                                ui1:Translator.Key="CUT"
 																		cmds:ContextMenu.Command="PixiEditor.Clipboard.Cut" />
 																		cmds:ContextMenu.Command="PixiEditor.Clipboard.Cut" />
                                                                             <MenuItem
                                                                             <MenuItem
-                                                                                views:Translator.Key="COPY"
+                                                                                ui1:Translator.Key="COPY"
 																		cmds:ContextMenu.Command="PixiEditor.Clipboard.Copy" />
 																		cmds:ContextMenu.Command="PixiEditor.Clipboard.Copy" />
                                                                             <MenuItem
                                                                             <MenuItem
-                                                                                views:Translator.Key="PASTE"
+                                                                                ui1:Translator.Key="PASTE"
 																		cmds:ContextMenu.Command="PixiEditor.Clipboard.Paste" />
 																		cmds:ContextMenu.Command="PixiEditor.Clipboard.Paste" />
                                                                             <Separator />
                                                                             <Separator />
-                                                                            <MenuItem views:Translator.Key="FLIP_LAYERS_HORIZONTALLY" cmds:Menu.Command="PixiEditor.Document.FlipLayersHorizontal"/>
-                                                                            <MenuItem views:Translator.Key="FLIP_LAYERS_VERTICALLY" cmds:Menu.Command="PixiEditor.Document.FlipLayersVertical"/>
+                                                                            <MenuItem ui1:Translator.Key="FLIP_LAYERS_HORIZONTALLY" cmds:Menu.Command="PixiEditor.Document.FlipLayersHorizontal"/>
+                                                                            <MenuItem ui1:Translator.Key="FLIP_LAYERS_VERTICALLY" cmds:Menu.Command="PixiEditor.Document.FlipLayersVertical"/>
                                                                             <Separator />
                                                                             <Separator />
-                                                                            <MenuItem views:Translator.Key="ROT_LAYERS_90_D" cmds:Menu.Command="PixiEditor.Document.Rotate90DegLayers"/>
-                                                                            <MenuItem views:Translator.Key="ROT_LAYERS_180_D" cmds:Menu.Command="PixiEditor.Document.Rotate180DegLayers"/>
-                                                                            <MenuItem views:Translator.Key="ROT_LAYERS_-90_D" cmds:Menu.Command="PixiEditor.Document.Rotate270DegLayers"/>
+                                                                            <MenuItem ui1:Translator.Key="ROT_LAYERS_90_D" cmds:Menu.Command="PixiEditor.Document.Rotate90DegLayers"/>
+                                                                            <MenuItem ui1:Translator.Key="ROT_LAYERS_180_D" cmds:Menu.Command="PixiEditor.Document.Rotate180DegLayers"/>
+                                                                            <MenuItem ui1:Translator.Key="ROT_LAYERS_-90_D" cmds:Menu.Command="PixiEditor.Document.Rotate270DegLayers"/>
                                                                         </StackPanel>
                                                                         </StackPanel>
                                                                     </Border>
                                                                     </Border>
                                                                     <ScrollViewer Margin="5" Grid.Column="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
                                                                     <ScrollViewer Margin="5" Grid.Column="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
@@ -674,7 +675,7 @@
                                                                             <ItemsControl.ItemTemplate>
                                                                             <ItemsControl.ItemTemplate>
                                                                                 <DataTemplate>
                                                                                 <DataTemplate>
                                                                                     <palettes:PaletteColorControl Cursor="Hand" CornerRadius="0"
                                                                                     <palettes:PaletteColorControl Cursor="Hand" CornerRadius="0"
-                                                                                        views:Translator.TooltipKey="CLICK_SELECT_PRIMARY"
+                                                                                        ui1:Translator.TooltipKey="CLICK_SELECT_PRIMARY"
                                                                                         Width="22" Height="22" Color="{Binding}">
                                                                                         Width="22" Height="22" Color="{Binding}">
                                                                                         <b:Interaction.Triggers>
                                                                                         <b:Interaction.Triggers>
                                                                                             <b:EventTrigger EventName="MouseLeftButtonUp">
                                                                                             <b:EventTrigger EventName="MouseLeftButtonUp">
@@ -711,7 +712,7 @@
                                 <LayoutAnchorablePaneGroup Orientation="Vertical" DockWidth="290">
                                 <LayoutAnchorablePaneGroup Orientation="Vertical" DockWidth="290">
 
 
                                     <LayoutAnchorablePane x:Name="colorPane">
                                     <LayoutAnchorablePane x:Name="colorPane">
-                                        <LayoutAnchorable ContentId="colorPicker" views:Translator.Key="COLOR_PICKER_TITLE" CanHide="False"
+                                        <LayoutAnchorable ContentId="colorPicker" ui1:Translator.Key="COLOR_PICKER_TITLE" CanHide="False"
                                                       CanClose="False" CanAutoHide="False" x:Name="colorPickerPanel"
                                                       CanClose="False" CanAutoHide="False" x:Name="colorPickerPanel"
                                                       CanDockAsTabbedDocument="False" CanFloat="True">
                                                       CanDockAsTabbedDocument="False" CanFloat="True">
                                             <usercontrols:SmallColorPicker SelectedColor="{Binding ColorsSubViewModel.PrimaryColor, Mode=TwoWay, Converter={StaticResource BackendColorToMediaColorConverter}}"
                                             <usercontrols:SmallColorPicker SelectedColor="{Binding ColorsSubViewModel.PrimaryColor, Mode=TwoWay, Converter={StaticResource BackendColorToMediaColorConverter}}"
@@ -722,7 +723,7 @@
                                                 </b:Interaction.Behaviors>
                                                 </b:Interaction.Behaviors>
                                             </usercontrols:SmallColorPicker>
                                             </usercontrols:SmallColorPicker>
                                         </LayoutAnchorable>
                                         </LayoutAnchorable>
-                                        <LayoutAnchorable ContentId="colorSliders" views:Translator.Key="COLOR_SLIDERS_TITLE" CanHide="False"
+                                        <LayoutAnchorable ContentId="colorSliders" ui1:Translator.Key="COLOR_SLIDERS_TITLE" CanHide="False"
                                                       CanClose="False" CanAutoHide="False" x:Name="colorSlidersPanel"
                                                       CanClose="False" CanAutoHide="False" x:Name="colorSlidersPanel"
                                                       CanDockAsTabbedDocument="False" CanFloat="True">
                                                       CanDockAsTabbedDocument="False" CanFloat="True">
                                             <colorpicker:ColorSliders Style="{StaticResource DefaultColorPickerStyle}" 
                                             <colorpicker:ColorSliders Style="{StaticResource DefaultColorPickerStyle}" 
@@ -732,7 +733,7 @@
                                                 </b:Interaction.Behaviors>
                                                 </b:Interaction.Behaviors>
                                             </colorpicker:ColorSliders>
                                             </colorpicker:ColorSliders>
                                         </LayoutAnchorable>
                                         </LayoutAnchorable>
-                                        <avalondock:LayoutAnchorable ContentId="palette" views:Translator.Key="PALETTE_TITLE" CanHide="False"
+                                        <avalondock:LayoutAnchorable ContentId="palette" ui1:Translator.Key="PALETTE_TITLE" CanHide="False"
                                                                  CanClose="False" CanAutoHide="False" x:Name="paletteAnchorable"
                                                                  CanClose="False" CanAutoHide="False" x:Name="paletteAnchorable"
                                                                  CanDockAsTabbedDocument="False" CanFloat="True">
                                                                  CanDockAsTabbedDocument="False" CanFloat="True">
                                             <Grid>
                                             <Grid>
@@ -755,7 +756,7 @@
                                         </avalondock:LayoutAnchorable>
                                         </avalondock:LayoutAnchorable>
                                         <avalondock:LayoutAnchorable
                                         <avalondock:LayoutAnchorable
 										ContentId="swatches"
 										ContentId="swatches"
-										views:Translator.Key="SWATCHES_TITLE"
+										ui1:Translator.Key="SWATCHES_TITLE"
 										CanHide="False"
 										CanHide="False"
 										CanClose="False"
 										CanClose="False"
 										CanAutoHide="False"
 										CanAutoHide="False"
@@ -769,7 +770,7 @@
                                     <LayoutAnchorablePane>
                                     <LayoutAnchorablePane>
                                         <LayoutAnchorable
                                         <LayoutAnchorable
                                             ContentId="layers"
                                             ContentId="layers"
-                                            views:Translator.Key="LAYERS_TITLE"
+                                            ui1:Translator.Key="LAYERS_TITLE"
                                             CanHide="False"
                                             CanHide="False"
                                             CanClose="False"
                                             CanClose="False"
                                             CanAutoHide="False"
                                             CanAutoHide="False"
@@ -782,7 +783,7 @@
                                     <LayoutAnchorablePane>
                                     <LayoutAnchorablePane>
                                         <LayoutAnchorable
                                         <LayoutAnchorable
                                             ContentId="navigation"
                                             ContentId="navigation"
-                                            views:Translator.Key="NAVIGATION_TITLE"
+                                            ui1:Translator.Key="NAVIGATION_TITLE"
                                             CanHide="True"
                                             CanHide="True"
                                             CanAutoHide="False"
                                             CanAutoHide="False"
                                             CanDockAsTabbedDocument="False"
                                             CanDockAsTabbedDocument="False"
@@ -822,8 +823,8 @@
                                         Style="{StaticResource ToolButtonStyle}"
                                         Style="{StaticResource ToolButtonStyle}"
                                         Command="{cmds:Command PixiEditor.Tools.SelectTool, UseProvided=True}"
                                         Command="{cmds:Command PixiEditor.Tools.SelectTool, UseProvided=True}"
                                         CommandParameter="{Binding}"
                                         CommandParameter="{Binding}"
-                                        views:Translator.TooltipLocalizedString="{Binding Tooltip}"
-                                        views:Translator.TooltipKey="{Binding Tooltip.Key}">
+                                        ui1:Translator.TooltipLocalizedString="{Binding Tooltip}"
+                                        ui1:Translator.TooltipKey="{Binding Tooltip.Key}">
                                         <Button.Background>
                                         <Button.Background>
                                             <ImageBrush
                                             <ImageBrush
                                                 RenderOptions.BitmapScalingMode="Fant"
                                                 RenderOptions.BitmapScalingMode="Fant"
@@ -872,7 +873,7 @@
                 </Grid.ColumnDefinitions>
                 </Grid.ColumnDefinitions>
                 <DockPanel>
                 <DockPanel>
                     <TextBlock
                     <TextBlock
-                        views:Translator.LocalizedString="{Binding ActiveActionDisplay}"
+                        ui1:Translator.LocalizedString="{Binding ActiveActionDisplay}"
                         Foreground="White"
                         Foreground="White"
                         FontSize="15"
                         FontSize="15"
                         Margin="10,0,0,0"
                         Margin="10,0,0,0"
@@ -899,7 +900,7 @@
                         Visibility="{Binding UpdateSubViewModel.UpdateReadyToInstall, Converter={StaticResource BoolToVisibilityConverter}, FallbackValue=Hidden}"
                         Visibility="{Binding UpdateSubViewModel.UpdateReadyToInstall, Converter={StaticResource BoolToVisibilityConverter}, FallbackValue=Hidden}"
                         FontSize="14"
                         FontSize="14"
                         Height="20"
                         Height="20"
-                        Command="{cmds:Command PixiEditor.Restart}" views:Translator.Key="RESTART"/>
+                        Command="{cmds:Command PixiEditor.Restart}" ui1:Translator.Key="RESTART"/>
                     <TextBlock
                     <TextBlock
                         VerticalAlignment="Center"
                         VerticalAlignment="Center"
                         Padding="10"
                         Padding="10"

+ 15 - 0
src/PixiEditor/Views/MainWindow.xaml.cs

@@ -5,9 +5,12 @@ using System.Windows.Controls;
 using System.Windows.Input;
 using System.Windows.Input;
 using System.Windows.Interop;
 using System.Windows.Interop;
 using System.Windows.Media.Imaging;
 using System.Windows.Media.Imaging;
+using AvalonDock.Layout;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.DependencyInjection;
 using PixiEditor.DrawingApi.Core.Bridge;
 using PixiEditor.DrawingApi.Core.Bridge;
 using PixiEditor.DrawingApi.Skia;
 using PixiEditor.DrawingApi.Skia;
+using PixiEditor.Extensions.Common.Localization;
+using PixiEditor.Extensions.UI;
 using PixiEditor.Helpers;
 using PixiEditor.Helpers;
 using PixiEditor.Models.AppExtensions;
 using PixiEditor.Models.AppExtensions;
 using PixiEditor.Models.Controllers;
 using PixiEditor.Models.Controllers;
@@ -49,6 +52,8 @@ internal partial class MainWindow : Window
         SkiaDrawingBackend skiaDrawingBackend = new SkiaDrawingBackend();
         SkiaDrawingBackend skiaDrawingBackend = new SkiaDrawingBackend();
         DrawingBackendApi.SetupBackend(skiaDrawingBackend);
         DrawingBackendApi.SetupBackend(skiaDrawingBackend);
 
 
+        SetupTranslator();
+
         preferences = services.GetRequiredService<IPreferences>();
         preferences = services.GetRequiredService<IPreferences>();
         platform = services.GetRequiredService<IPlatform>();
         platform = services.GetRequiredService<IPlatform>();
         DataContext = services.GetRequiredService<ViewModelMain>();
         DataContext = services.GetRequiredService<ViewModelMain>();
@@ -76,6 +81,16 @@ internal partial class MainWindow : Window
         DataContext.DocumentManagerSubViewModel.ActiveDocumentChanged += DocumentChanged;
         DataContext.DocumentManagerSubViewModel.ActiveDocumentChanged += DocumentChanged;
     }
     }
 
 
+    private void SetupTranslator()
+    {
+        Translator.ExternalProperties.Add(new ExternalProperty<LayoutContent>(TranslateLayoutContent));
+    }
+
+    private void TranslateLayoutContent(DependencyObject d, LocalizedString value)
+    {
+        ((LayoutContent)d).SetValue(LayoutContent.TitleProperty, value.Value);
+    }
+
     private IPlatform GetActivePlatform()
     private IPlatform GetActivePlatform()
     {
     {
 #if STEAM
 #if STEAM

+ 10 - 9
src/PixiEditor/Views/UserControls/AnchorPointPicker.xaml

@@ -5,6 +5,7 @@
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d"
              mc:Ignorable="d"
              d:DesignHeight="78" d:DesignWidth="78">
              d:DesignHeight="78" d:DesignWidth="78">
     <Grid Name="container">
     <Grid Name="container">
@@ -19,28 +20,28 @@
             <ColumnDefinition Width="26" />
             <ColumnDefinition Width="26" />
         </Grid.ColumnDefinitions>
         </Grid.ColumnDefinitions>
         <ToggleButton IsChecked="True" Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
         <ToggleButton IsChecked="True" Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
-                      Style="{DynamicResource AnchorPointToggleButtonStyle}" views:Translator.TooltipKey="TOP_LEFT" Grid.Row="0"
+                      Style="{DynamicResource AnchorPointToggleButtonStyle}" ui:Translator.TooltipKey="TOP_LEFT" Grid.Row="0"
                       Grid.Column="0" BorderBrush="Black">
                       Grid.Column="0" BorderBrush="Black">
             <ToggleButton.Background>
             <ToggleButton.Background>
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
             </ToggleButton.Background>
             </ToggleButton.Background>
         </ToggleButton>
         </ToggleButton>
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
-                      Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="0" views:Translator.TooltipKey="TOP_CENTER"
+                      Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="0" ui:Translator.TooltipKey="TOP_CENTER"
                       Grid.Column="1" BorderBrush="Black">
                       Grid.Column="1" BorderBrush="Black">
             <ToggleButton.Background>
             <ToggleButton.Background>
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
             </ToggleButton.Background>
             </ToggleButton.Background>
         </ToggleButton>
         </ToggleButton>
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
-                      Style="{DynamicResource AnchorPointToggleButtonStyle}" views:Translator.TooltipKey="TOP_RIGHT" Grid.Row="0"
+                      Style="{DynamicResource AnchorPointToggleButtonStyle}" ui:Translator.TooltipKey="TOP_RIGHT" Grid.Row="0"
                       Grid.Column="2" BorderBrush="Black">
                       Grid.Column="2" BorderBrush="Black">
             <ToggleButton.Background>
             <ToggleButton.Background>
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
             </ToggleButton.Background>
             </ToggleButton.Background>
         </ToggleButton>
         </ToggleButton>
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
-                      Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="1" views:Translator.TooltipKey="MIDDLE_LEFT"
+                      Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="1" ui:Translator.TooltipKey="MIDDLE_LEFT"
                       Grid.Column="0" BorderBrush="Black">
                       Grid.Column="0" BorderBrush="Black">
             <ToggleButton.Background>
             <ToggleButton.Background>
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
@@ -48,35 +49,35 @@
         </ToggleButton>
         </ToggleButton>
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="1" Grid.Column="1"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="1" Grid.Column="1"
-                      views:Translator.TooltipKey="MIDDLE_CENTER" BorderBrush="Black">
+                      ui:Translator.TooltipKey="MIDDLE_CENTER" BorderBrush="Black">
             <ToggleButton.Background>
             <ToggleButton.Background>
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
             </ToggleButton.Background>
             </ToggleButton.Background>
         </ToggleButton>
         </ToggleButton>
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="1" Grid.Column="2"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="1" Grid.Column="2"
-                      views:Translator.TooltipKey="MIDDLE_RIGHT" BorderBrush="Black">
+                      ui:Translator.TooltipKey="MIDDLE_RIGHT" BorderBrush="Black">
             <ToggleButton.Background>
             <ToggleButton.Background>
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
             </ToggleButton.Background>
             </ToggleButton.Background>
         </ToggleButton>
         </ToggleButton>
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="2" Grid.Column="0"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="2" Grid.Column="0"
-                      views:Translator.TooltipKey="BOTTOM_LEFT" BorderBrush="Black">
+                      ui:Translator.TooltipKey="BOTTOM_LEFT" BorderBrush="Black">
             <ToggleButton.Background>
             <ToggleButton.Background>
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
             </ToggleButton.Background>
             </ToggleButton.Background>
         </ToggleButton>
         </ToggleButton>
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="2" Grid.Column="1"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="2" Grid.Column="1"
-                      views:Translator.TooltipKey="BOTTOM_CENTER" BorderBrush="Black">
+                      ui:Translator.TooltipKey="BOTTOM_CENTER" BorderBrush="Black">
             <ToggleButton.Background>
             <ToggleButton.Background>
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
             </ToggleButton.Background>
             </ToggleButton.Background>
         </ToggleButton>
         </ToggleButton>
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
         <ToggleButton Checked="ToggleButton_Checked" Click="ToggleButton_Click" Margin="0.25"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="2" Grid.Column="2"
                       Style="{DynamicResource AnchorPointToggleButtonStyle}" Grid.Row="2" Grid.Column="2"
-                      views:Translator.TooltipKey="BOTTOM_RIGHT" BorderBrush="Black">
+                      ui:Translator.TooltipKey="BOTTOM_RIGHT" BorderBrush="Black">
             <ToggleButton.Background>
             <ToggleButton.Background>
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
                 <ImageBrush ImageSource="../../Images/AnchorDot.png" />
             </ToggleButton.Background>
             </ToggleButton.Background>

+ 1 - 0
src/PixiEditor/Views/UserControls/BlendModeComboBox.cs

@@ -1,6 +1,7 @@
 using System.Windows;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Controls;
 using PixiEditor.ChangeableDocument.Enums;
 using PixiEditor.ChangeableDocument.Enums;
+using PixiEditor.Extensions.UI;
 using PixiEditor.Helpers.Extensions;
 using PixiEditor.Helpers.Extensions;
 
 
 namespace PixiEditor.Views.UserControls;
 namespace PixiEditor.Views.UserControls;

+ 12 - 11
src/PixiEditor/Views/UserControls/Layers/FolderControl.xaml

@@ -11,6 +11,7 @@
              xmlns:userControls1="clr-namespace:PixiEditor.Views.UserControls"
              xmlns:userControls1="clr-namespace:PixiEditor.Views.UserControls"
              xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML"
              xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML"
              xmlns:sys="clr-namespace:System;assembly=mscorlib"
              xmlns:sys="clr-namespace:System;assembly=mscorlib"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d" 
              mc:Ignorable="d" 
              Focusable="True"
              Focusable="True"
              d:DesignHeight="35" 
              d:DesignHeight="35" 
@@ -122,27 +123,27 @@
         </Grid>
         </Grid>
         <Border.ContextMenu>
         <Border.ContextMenu>
             <ContextMenu>
             <ContextMenu>
-                <MenuItem userControls:Translator.Key="DELETE" Command="{cmds:Command PixiEditor.Layer.DeleteAllSelected}"/>
-                <MenuItem userControls:Translator.Key="RENAME" Click="RenameMenuItem_Click"/>
+                <MenuItem ui:Translator.Key="DELETE" Command="{cmds:Command PixiEditor.Layer.DeleteAllSelected}"/>
+                <MenuItem ui:Translator.Key="RENAME" Click="RenameMenuItem_Click"/>
                 <MenuItem 
                 <MenuItem 
                     IsCheckable="True" 
                     IsCheckable="True" 
                     IsChecked="{Binding PlacementTarget.Tag.Folder.ClipToMemberBelowEnabledBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                     IsChecked="{Binding PlacementTarget.Tag.Folder.ClipToMemberBelowEnabledBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
-                    userControls:Translator.Key="CLIP_TO_BELOW"/>
+                    ui:Translator.Key="CLIP_TO_BELOW"/>
                 <Separator/>
                 <Separator/>
-                <MenuItem userControls:Translator.Key="MOVE_UPWARDS" Command="{cmds:Command PixiEditor.Layer.MoveSelectedMemberUpwards}"/>
-                <MenuItem userControls:Translator.Key="MOVE_DOWNWARDS" Command="{cmds:Command PixiEditor.Layer.MoveSelectedMemberDownwards}"/>
+                <MenuItem ui:Translator.Key="MOVE_UPWARDS" Command="{cmds:Command PixiEditor.Layer.MoveSelectedMemberUpwards}"/>
+                <MenuItem ui:Translator.Key="MOVE_DOWNWARDS" Command="{cmds:Command PixiEditor.Layer.MoveSelectedMemberDownwards}"/>
                 <Separator/>
                 <Separator/>
-                <MenuItem userControls:Translator.Key="CREATE_MASK" Command="{cmds:Command PixiEditor.Layer.CreateMask}"/>
-                <MenuItem userControls:Translator.Key="DELETE_MASK" Command="{cmds:Command PixiEditor.Layer.DeleteMask}"/>
+                <MenuItem ui:Translator.Key="CREATE_MASK" Command="{cmds:Command PixiEditor.Layer.CreateMask}"/>
+                <MenuItem ui:Translator.Key="DELETE_MASK" Command="{cmds:Command PixiEditor.Layer.DeleteMask}"/>
                 <MenuItem 
                 <MenuItem 
                     IsCheckable="True" 
                     IsCheckable="True" 
                     IsChecked="{Binding PlacementTarget.Tag.Folder.MaskIsVisibleBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                     IsChecked="{Binding PlacementTarget.Tag.Folder.MaskIsVisibleBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                     IsEnabled="{Binding PlacementTarget.Tag.Folder.HasMaskBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                     IsEnabled="{Binding PlacementTarget.Tag.Folder.HasMaskBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
-                    userControls:Translator.Key="ENABLE_MASK"/>
+                    ui:Translator.Key="ENABLE_MASK"/>
                 <Separator/>
                 <Separator/>
-                <MenuItem userControls:Translator.Key="MERGE_SELECTED" Command="{cmds:Command PixiEditor.Layer.MergeSelected}"/>
-                <MenuItem userControls:Translator.Key="MERGE_WITH_ABOVE" Command="{cmds:Command PixiEditor.Layer.MergeWithAbove}"/>
-                <MenuItem userControls:Translator.Key="MERGE_WITH_BELOW" Command="{cmds:Command PixiEditor.Layer.MergeWithBelow}"/>
+                <MenuItem ui:Translator.Key="MERGE_SELECTED" Command="{cmds:Command PixiEditor.Layer.MergeSelected}"/>
+                <MenuItem ui:Translator.Key="MERGE_WITH_ABOVE" Command="{cmds:Command PixiEditor.Layer.MergeWithAbove}"/>
+                <MenuItem ui:Translator.Key="MERGE_WITH_BELOW" Command="{cmds:Command PixiEditor.Layer.MergeWithBelow}"/>
             </ContextMenu>
             </ContextMenu>
         </Border.ContextMenu>
         </Border.ContextMenu>
     </Border>
     </Border>

+ 15 - 14
src/PixiEditor/Views/UserControls/Layers/LayerControl.xaml

@@ -13,6 +13,7 @@
              xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML"
              xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML"
              xmlns:sys="clr-namespace:System;assembly=mscorlib"
              xmlns:sys="clr-namespace:System;assembly=mscorlib"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d" 
              mc:Ignorable="d" 
              Focusable="True"
              Focusable="True"
              d:DesignHeight="35" d:DesignWidth="250" Name="uc"
              d:DesignHeight="35" d:DesignWidth="250" Name="uc"
@@ -130,33 +131,33 @@
         </Grid>
         </Grid>
         <Border.ContextMenu>
         <Border.ContextMenu>
             <ContextMenu>
             <ContextMenu>
-                <MenuItem views:Translator.Key="DUPLICATE" Command="{cmds:Command PixiEditor.Layer.DuplicateSelectedLayer}"/>
-                <MenuItem views:Translator.Key="DELETE" Command="{cmds:Command PixiEditor.Layer.DeleteAllSelected}"/>
-                <MenuItem views:Translator.Key="RENAME" Click="RenameMenuItem_Click"/>
+                <MenuItem ui:Translator.Key="DUPLICATE" Command="{cmds:Command PixiEditor.Layer.DuplicateSelectedLayer}"/>
+                <MenuItem ui:Translator.Key="DELETE" Command="{cmds:Command PixiEditor.Layer.DeleteAllSelected}"/>
+                <MenuItem ui:Translator.Key="RENAME" Click="RenameMenuItem_Click"/>
                 <MenuItem 
                 <MenuItem 
                     IsCheckable="True" 
                     IsCheckable="True" 
                     IsChecked="{Binding PlacementTarget.Tag.Layer.ClipToMemberBelowEnabledBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                     IsChecked="{Binding PlacementTarget.Tag.Layer.ClipToMemberBelowEnabledBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
-                    views:Translator.Key="CLIP_TO_BELOW"/>
+                    ui:Translator.Key="CLIP_TO_BELOW"/>
                 <MenuItem 
                 <MenuItem 
                     IsCheckable="True" 
                     IsCheckable="True" 
                     IsChecked="{Binding PlacementTarget.Tag.Layer.LockTransparencyBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                     IsChecked="{Binding PlacementTarget.Tag.Layer.LockTransparencyBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
-                    views:Translator.Key="LOCK_TRANSPARENCY"/>
+                    ui:Translator.Key="LOCK_TRANSPARENCY"/>
                 <Separator/>
                 <Separator/>
-                <MenuItem views:Translator.Key="MOVE_UPWARDS" Command="{cmds:Command PixiEditor.Layer.MoveSelectedMemberUpwards}"/>
-                <MenuItem views:Translator.Key="MOVE_DOWNWARDS" Command="{cmds:Command PixiEditor.Layer.MoveSelectedMemberDownwards}"/>
+                <MenuItem ui:Translator.Key="MOVE_UPWARDS" Command="{cmds:Command PixiEditor.Layer.MoveSelectedMemberUpwards}"/>
+                <MenuItem ui:Translator.Key="MOVE_DOWNWARDS" Command="{cmds:Command PixiEditor.Layer.MoveSelectedMemberDownwards}"/>
                 <Separator/>
                 <Separator/>
-                <MenuItem views:Translator.Key="CREATE_MASK" Command="{cmds:Command PixiEditor.Layer.CreateMask}"/>
-                <MenuItem views:Translator.Key="DELETE_MASK" Command="{cmds:Command PixiEditor.Layer.DeleteMask}"/>
+                <MenuItem ui:Translator.Key="CREATE_MASK" Command="{cmds:Command PixiEditor.Layer.CreateMask}"/>
+                <MenuItem ui:Translator.Key="DELETE_MASK" Command="{cmds:Command PixiEditor.Layer.DeleteMask}"/>
                 <MenuItem 
                 <MenuItem 
                     IsCheckable="True" 
                     IsCheckable="True" 
                     IsChecked="{Binding PlacementTarget.Tag.Layer.MaskIsVisibleBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                     IsChecked="{Binding PlacementTarget.Tag.Layer.MaskIsVisibleBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                     IsEnabled="{Binding PlacementTarget.Tag.Layer.HasMaskBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
                     IsEnabled="{Binding PlacementTarget.Tag.Layer.HasMaskBindable, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
-                    views:Translator.Key="ENABLE_MASK"/>
-                <MenuItem views:Translator.Key="APPLY_MASK" Command="{cmds:Command PixiEditor.Layer.ApplyMask}"/>
+                    ui:Translator.Key="ENABLE_MASK"/>
+                <MenuItem ui:Translator.Key="APPLY_MASK" Command="{cmds:Command PixiEditor.Layer.ApplyMask}"/>
                 <Separator/>
                 <Separator/>
-                <MenuItem views:Translator.Key="MERGE_SELECTED" Command="{cmds:Command PixiEditor.Layer.MergeSelected}"/>
-                <MenuItem views:Translator.Key="MERGE_WITH_ABOVE" Command="{cmds:Command PixiEditor.Layer.MergeWithAbove}"/>
-                <MenuItem views:Translator.Key="MERGE_WITH_BELOW" Command="{cmds:Command PixiEditor.Layer.MergeWithBelow}"/>
+                <MenuItem ui:Translator.Key="MERGE_SELECTED" Command="{cmds:Command PixiEditor.Layer.MergeSelected}"/>
+                <MenuItem ui:Translator.Key="MERGE_WITH_ABOVE" Command="{cmds:Command PixiEditor.Layer.MergeWithAbove}"/>
+                <MenuItem ui:Translator.Key="MERGE_WITH_BELOW" Command="{cmds:Command PixiEditor.Layer.MergeWithBelow}"/>
             </ContextMenu>
             </ContextMenu>
         </Border.ContextMenu>
         </Border.ContextMenu>
     </Border>
     </Border>

+ 7 - 6
src/PixiEditor/Views/UserControls/Layers/LayersManager.xaml

@@ -14,6 +14,7 @@
              xmlns:commands="clr-namespace:PixiEditor.Models.Commands.XAML" 
              xmlns:commands="clr-namespace:PixiEditor.Models.Commands.XAML" 
              xmlns:layerUserControls="clr-namespace:PixiEditor.Views.UserControls.Layers"
              xmlns:layerUserControls="clr-namespace:PixiEditor.Views.UserControls.Layers"
              xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
              xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
+             xmlns:uiExt="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d"
              mc:Ignorable="d"
              d:DesignHeight="450" d:DesignWidth="250" x:Name="layersManager">
              d:DesignHeight="450" d:DesignWidth="250" x:Name="layersManager">
     <Grid>
     <Grid>
@@ -27,7 +28,7 @@
                 <Button 
                 <Button 
                     Command="{commands:Command PixiEditor.Layer.NewLayer}" 
                     Command="{commands:Command PixiEditor.Layer.NewLayer}" 
                     DockPanel.Dock="Left"
                     DockPanel.Dock="Left"
-                    Height="24" Width="24" Cursor="Hand" vws:Translator.TooltipKey="NEW_LAYER"
+                    Height="24" Width="24" Cursor="Hand" uiExt:Translator.TooltipKey="NEW_LAYER"
                     HorizontalAlignment="Stretch" Margin="0,0,5,0"
                     HorizontalAlignment="Stretch" Margin="0,0,5,0"
                     Style="{StaticResource ToolButtonStyle}"
                     Style="{StaticResource ToolButtonStyle}"
                     FlowDirection="LeftToRight">
                     FlowDirection="LeftToRight">
@@ -37,7 +38,7 @@
                 </Button>
                 </Button>
                 <Button 
                 <Button 
                     Command="{commands:Command PixiEditor.Layer.NewFolder}" 
                     Command="{commands:Command PixiEditor.Layer.NewFolder}" 
-                    Height="24" Width="24" vws:Translator.TooltipKey="NEW_FOLDER" Cursor="Hand"
+                    Height="24" Width="24" uiExt:Translator.TooltipKey="NEW_FOLDER" Cursor="Hand"
                     DockPanel.Dock="Left"
                     DockPanel.Dock="Left"
                     HorizontalAlignment="Stretch"  Margin="0,0,5,0"
                     HorizontalAlignment="Stretch"  Margin="0,0,5,0"
                     Style="{StaticResource ToolButtonStyle}"
                     Style="{StaticResource ToolButtonStyle}"
@@ -47,7 +48,7 @@
                     </Button.Background>
                     </Button.Background>
                 </Button>
                 </Button>
                 <Button 
                 <Button 
-                    Command="{commands:Command PixiEditor.Layer.DeleteSelected}" Height="24" Width="24" vws:Translator.TooltipKey="LAYER_DELETE_ALL_SELECTED"
+                    Command="{commands:Command PixiEditor.Layer.DeleteSelected}" Height="24" Width="24" uiExt:Translator.TooltipKey="LAYER_DELETE_ALL_SELECTED"
                     Cursor="Hand"
                     Cursor="Hand"
                     HorizontalAlignment="Stretch" Margin="0,0,5,0"
                     HorizontalAlignment="Stretch" Margin="0,0,5,0"
                     DockPanel.Dock="Left"
                     DockPanel.Dock="Left"
@@ -58,7 +59,7 @@
                     </Button.Background>
                     </Button.Background>
                 </Button>
                 </Button>
                 <Button 
                 <Button 
-                    Command="{commands:Command PixiEditor.Layer.MergeWithBelow}" Height="24" Width="24" vws:Translator.TooltipKey="MERGE_WITH_BELOW" Cursor="Hand"
+                    Command="{commands:Command PixiEditor.Layer.MergeWithBelow}" Height="24" Width="24" uiExt:Translator.TooltipKey="MERGE_WITH_BELOW" Cursor="Hand"
                     DockPanel.Dock="Right"
                     DockPanel.Dock="Right"
                     HorizontalAlignment="Stretch" Margin="5,0,0,0"
                     HorizontalAlignment="Stretch" Margin="5,0,0,0"
                     Style="{StaticResource ToolButtonStyle}"
                     Style="{StaticResource ToolButtonStyle}"
@@ -68,7 +69,7 @@
                     </Button.Background>
                     </Button.Background>
                 </Button>
                 </Button>
                 <Button 
                 <Button 
-                    Height="24" Width="24" vws:Translator.TooltipKey="CREATE_MASK" Cursor="Hand"
+                    Height="24" Width="24" uiExt:Translator.TooltipKey="CREATE_MASK" Cursor="Hand"
                     DockPanel.Dock="Right"
                     DockPanel.Dock="Right"
                     HorizontalAlignment="Stretch" Margin="5,0,0,0"
                     HorizontalAlignment="Stretch" Margin="5,0,0,0"
                     Style="{StaticResource ToolButtonStyle}"
                     Style="{StaticResource ToolButtonStyle}"
@@ -79,7 +80,7 @@
                     </Button.Background>
                     </Button.Background>
                 </Button>
                 </Button>
                 <Button 
                 <Button 
-                    Height="24" Width="24" vws:Translator.TooltipKey="LOCK_TRANSPARENCY" Cursor="Hand"
+                    Height="24" Width="24" uiExt:Translator.TooltipKey="LOCK_TRANSPARENCY" Cursor="Hand"
                     DockPanel.Dock="Right"
                     DockPanel.Dock="Right"
                     HorizontalAlignment="Stretch" Margin="5,0,0,0"
                     HorizontalAlignment="Stretch" Margin="5,0,0,0"
                     Style="{StaticResource ToolButtonStyle}"
                     Style="{StaticResource ToolButtonStyle}"

+ 5 - 4
src/PixiEditor/Views/UserControls/Layers/ReferenceLayer.xaml

@@ -11,6 +11,7 @@
              xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML"
              xmlns:cmds="clr-namespace:PixiEditor.Models.Commands.XAML"
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d" 
              mc:Ignorable="d" 
              d:DesignHeight="60" d:DesignWidth="350" VerticalAlignment="Center" Name="uc">
              d:DesignHeight="60" d:DesignWidth="350" VerticalAlignment="Center" Name="uc">
     <Border BorderBrush="{StaticResource DarkerAccentColor}" BorderThickness="0 2 0 0" MinWidth="60"
     <Border BorderBrush="{StaticResource DarkerAccentColor}" BorderThickness="0 2 0 0" MinWidth="60"
@@ -71,7 +72,7 @@
 
 
                             <TextBlock IsEnabled="{Binding ElementName=uc, Path=IsEnabled}" 
                             <TextBlock IsEnabled="{Binding ElementName=uc, Path=IsEnabled}" 
                                         Margin="0 0 5 0" Foreground="White" 
                                         Margin="0 0 5 0" Foreground="White" 
-                                        FontSize="15" VerticalAlignment="Center" views:Translator.Key="ADD_REFERENCE_LAYER"/>
+                                        FontSize="15" VerticalAlignment="Center" ui:Translator.Key="ADD_REFERENCE_LAYER"/>
                         </StackPanel>
                         </StackPanel>
                         <i:Interaction.Triggers>
                         <i:Interaction.Triggers>
                             <i:EventTrigger EventName="MouseUp">
                             <i:EventTrigger EventName="MouseUp">
@@ -123,7 +124,7 @@
                     <Button Cursor="Hand" DockPanel.Dock="Right"
                     <Button Cursor="Hand" DockPanel.Dock="Right"
                             Command="{cmds:Command PixiEditor.Layer.ResetReferenceLayerPosition}"
                             Command="{cmds:Command PixiEditor.Layer.ResetReferenceLayerPosition}"
                             Style="{StaticResource ImageButtonStyle}" 
                             Style="{StaticResource ImageButtonStyle}" 
-                            views:Translator.TooltipKey="RESET_REFERENCE_LAYER_POS"
+                            ui:Translator.TooltipKey="RESET_REFERENCE_LAYER_POS"
                             RenderOptions.BitmapScalingMode="HighQuality"
                             RenderOptions.BitmapScalingMode="HighQuality"
                             Width="20" Height="20" HorizontalAlignment="Right">
                             Width="20" Height="20" HorizontalAlignment="Right">
                         <Button.Background>
                         <Button.Background>
@@ -133,7 +134,7 @@
                     <Button Cursor="Hand" DockPanel.Dock="Right"
                     <Button Cursor="Hand" DockPanel.Dock="Right"
                             Command="{cmds:Command PixiEditor.Layer.TransformReferenceLayer}"
                             Command="{cmds:Command PixiEditor.Layer.TransformReferenceLayer}"
                             Style="{StaticResource ImageButtonStyle}" 
                             Style="{StaticResource ImageButtonStyle}" 
-                            views:Translator.TooltipKey="TRANSFORM_REFERENCE_LAYER"
+                            ui:Translator.TooltipKey="TRANSFORM_REFERENCE_LAYER"
                             RenderOptions.BitmapScalingMode="HighQuality"
                             RenderOptions.BitmapScalingMode="HighQuality"
                             Width="20" Height="20" HorizontalAlignment="Right">
                             Width="20" Height="20" HorizontalAlignment="Right">
                         <Button.Background>
                         <Button.Background>
@@ -142,7 +143,7 @@
                     </Button>
                     </Button>
                     <TextBlock IsEnabled="{Binding ElementName=uc, Path=IsEnabled}" HorizontalAlignment="Center"
                     <TextBlock IsEnabled="{Binding ElementName=uc, Path=IsEnabled}" HorizontalAlignment="Center"
                                Margin="0 0 5 0" Foreground="White" 
                                Margin="0 0 5 0" Foreground="White" 
-                               FontSize="15" VerticalAlignment="Center" views:Translator.Key="REFERENCE"/>
+                               FontSize="15" VerticalAlignment="Center" ui:Translator.Key="REFERENCE"/>
                 </DockPanel>
                 </DockPanel>
             </Grid>
             </Grid>
         </DockPanel>
         </DockPanel>

+ 4 - 3
src/PixiEditor/Views/UserControls/Palettes/ColorReplacer.xaml

@@ -12,6 +12,7 @@
              xmlns:colorPicker="clr-namespace:ColorPicker;assembly=ColorPicker"
              xmlns:colorPicker="clr-namespace:ColorPicker;assembly=ColorPicker"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:helpers="clr-namespace:PixiEditor.Helpers"
              xmlns:helpers="clr-namespace:PixiEditor.Helpers"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d" Name="uc"
              mc:Ignorable="d" Name="uc"
              d:DesignHeight="50" d:DesignWidth="300">
              d:DesignHeight="50" d:DesignWidth="300">
     <Border BorderBrush="{StaticResource DarkerAccentColor}" 
     <Border BorderBrush="{StaticResource DarkerAccentColor}" 
@@ -32,7 +33,7 @@
                     <local:PaletteColorControl Color="{Binding ElementName=uc, Path=ColorToReplace}"
                     <local:PaletteColorControl Color="{Binding ElementName=uc, Path=ColorToReplace}"
                             Height="35" 
                             Height="35" 
                             Width="35" 
                             Width="35" 
-                            views:Translator.TooltipKey="REPLACER_TOOLTIP"
+                            ui:Translator.TooltipKey="REPLACER_TOOLTIP"
                             AllowDrop="True" Drop="UIElement_OnDrop"/>
                             AllowDrop="True" Drop="UIElement_OnDrop"/>
                     <Image Source="/Images/Arrow-right.png" Height="20" Width="20" Margin="10 0" FlowDirection="{helpers:Localization FlowDirection}"/>
                     <Image Source="/Images/Arrow-right.png" Height="20" Width="20" Margin="10 0" FlowDirection="{helpers:Localization FlowDirection}"/>
                     <colorPicker:PortableColorPicker 
                     <colorPicker:PortableColorPicker 
@@ -42,9 +43,9 @@
                         Height="37"
                         Height="37"
                         Style="{StaticResource DefaultColorPickerStyle}"
                         Style="{StaticResource DefaultColorPickerStyle}"
                         Width="37" Focusable="False" Margin="0 0 10 0"
                         Width="37" Focusable="False" Margin="0 0 10 0"
-                        views:Translator.TooltipKey="CLICK_TO_CHOOSE_COLOR"
+                        ui:Translator.TooltipKey="CLICK_TO_CHOOSE_COLOR"
                         ShowAlpha="False"/>
                         ShowAlpha="False"/>
-                    <Button Click="ReplaceButton_OnClick" views:Translator.TooltipKey="REPLACE_COLOR"
+                    <Button Click="ReplaceButton_OnClick" ui:Translator.TooltipKey="REPLACE_COLOR"
                             Style="{StaticResource ToolButtonStyle}" Cursor="Hand" Height="20" Width="20">
                             Style="{StaticResource ToolButtonStyle}" Cursor="Hand" Height="20" Width="20">
                         <Button.Background>
                         <Button.Background>
                             <ImageBrush ImageSource="/Images/Replace.png"/>
                             <ImageBrush ImageSource="/Images/Replace.png"/>

+ 2 - 1
src/PixiEditor/Views/UserControls/Palettes/CompactPaletteViewer.xaml

@@ -8,6 +8,7 @@
              xmlns:b="http://schemas.microsoft.com/xaml/behaviors" 
              xmlns:b="http://schemas.microsoft.com/xaml/behaviors" 
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d"  Name="compactPaletteViewer"
              mc:Ignorable="d"  Name="compactPaletteViewer"
              d:DesignHeight="900" d:DesignWidth="30">
              d:DesignHeight="900" d:DesignWidth="30">
     <Grid Background="{StaticResource AccentColor}">
     <Grid Background="{StaticResource AccentColor}">
@@ -32,7 +33,7 @@
                 </ItemsControl.ItemsPanel>
                 </ItemsControl.ItemsPanel>
                 <ItemsControl.ItemTemplate>
                 <ItemsControl.ItemTemplate>
                     <DataTemplate>
                     <DataTemplate>
-                        <local:PaletteColorControl views:Translator.TooltipKey="PALETTE_COLOR_TOOLTIP"
+                        <local:PaletteColorControl ui:Translator.TooltipKey="PALETTE_COLOR_TOOLTIP"
                                             Cursor="Hand"
                                             Cursor="Hand"
                                             Color="{Binding}" Width="20" Height="20" CornerRadius="0">
                                             Color="{Binding}" Width="20" Height="20" CornerRadius="0">
                             <b:Interaction.Triggers>
                             <b:Interaction.Triggers>

+ 3 - 2
src/PixiEditor/Views/UserControls/Palettes/PaletteColorAdder.xaml

@@ -7,6 +7,7 @@
              xmlns:local="clr-namespace:PixiEditor.Views.UserControls" 
              xmlns:local="clr-namespace:PixiEditor.Views.UserControls" 
              xmlns:colorpicker="clr-namespace:ColorPicker;assembly=ColorPicker"
              xmlns:colorpicker="clr-namespace:ColorPicker;assembly=ColorPicker"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d" Name="paletteColorAdder"
              mc:Ignorable="d" Name="paletteColorAdder"
              d:DesignHeight="36" d:DesignWidth="120">
              d:DesignHeight="36" d:DesignWidth="120">
     <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
     <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
@@ -18,7 +19,7 @@
             ShowAlpha="False"/>
             ShowAlpha="False"/>
         <Button Name="AddButton" Margin="0" Width="24" Height="24" 
         <Button Name="AddButton" Margin="0" Width="24" Height="24" 
                 Style="{StaticResource ToolButtonStyle}"
                 Style="{StaticResource ToolButtonStyle}"
-                views:Translator.TooltipKey="ADD_COLOR_TO_PALETTE"
+                ui:Translator.TooltipKey="ADD_COLOR_TO_PALETTE"
                 Cursor="Hand"  Click="Button_Click">
                 Cursor="Hand"  Click="Button_Click">
             <Button.Background>
             <Button.Background>
                 <ImageBrush ImageSource="/Images/Plus-square.png"/>
                 <ImageBrush ImageSource="/Images/Plus-square.png"/>
@@ -26,7 +27,7 @@
         </Button>
         </Button>
         <Button Name="AddFromSwatches" Margin="10 2 0 0" Width="24" Height="24" 
         <Button Name="AddFromSwatches" Margin="10 2 0 0" Width="24" Height="24" 
                 Style="{StaticResource ToolButtonStyle}" 
                 Style="{StaticResource ToolButtonStyle}" 
-                views:Translator.TooltipKey="ADD_FROM_SWATCHES"
+                ui:Translator.TooltipKey="ADD_FROM_SWATCHES"
                 Cursor="Hand"  Click="AddFromSwatches_OnClick">
                 Cursor="Hand"  Click="AddFromSwatches_OnClick">
             <Button.Background>
             <Button.Background>
                 <ImageBrush ImageSource="/Images/CopyAdd.png"/>
                 <ImageBrush ImageSource="/Images/CopyAdd.png"/>

+ 5 - 4
src/PixiEditor/Views/UserControls/Palettes/PaletteItem.xaml

@@ -7,6 +7,7 @@
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:controls="clr-namespace:PixiEditor.Views.UserControls.Palettes"
              xmlns:controls="clr-namespace:PixiEditor.Views.UserControls.Palettes"
              xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
              xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d"
              mc:Ignorable="d"
              d:DesignHeight="200" 
              d:DesignHeight="200" 
              d:DesignWidth="800" 
              d:DesignWidth="800" 
@@ -40,7 +41,7 @@
                        Source="/Images/SupperterPack.png" Width="24"
                        Source="/Images/SupperterPack.png" Width="24"
                        DockPanel.Dock="Right" HorizontalAlignment="Right"/>-->
                        DockPanel.Dock="Right" HorizontalAlignment="Right"/>-->
                 <userControls:Chip Margin="0 5 5 0"
                 <userControls:Chip Margin="0 5 5 0"
-                                   views:Translator.Key="{Binding ElementName=paletteItem, Path=Palette.Source.Name.Key}"
+                                   ui:Translator.Key="{Binding ElementName=paletteItem, Path=Palette.Source.Name.Key}"
                                    DockPanel.Dock="Right" HorizontalAlignment="Right"/>
                                    DockPanel.Dock="Right" HorizontalAlignment="Right"/>
             </DockPanel>
             </DockPanel>
             <TextBlock Margin="0 5 0 0">
             <TextBlock Margin="0 5 0 0">
@@ -73,7 +74,7 @@
                     </Style>
                     </Style>
                 </Border.Style>
                 </Border.Style>
                 <Button
                 <Button
-                    views:Translator.TooltipKey="USE_IN_CURRENT_IMAGE" Cursor="Hand"
+                    ui:Translator.TooltipKey="USE_IN_CURRENT_IMAGE" Cursor="Hand"
                     Style="{StaticResource ToolButtonStyle}"
                     Style="{StaticResource ToolButtonStyle}"
                     Margin="0 3 0 0" Width="24" Height="24"
                     Margin="0 3 0 0" Width="24" Height="24"
                     CommandParameter="{Binding ElementName=paletteItem, Path=Palette.Colors}"
                     CommandParameter="{Binding ElementName=paletteItem, Path=Palette.Colors}"
@@ -100,7 +101,7 @@
                 <Button
                 <Button
                     Command="{Binding ElementName=paletteItem, Path=ToggleFavouriteCommand}"
                     Command="{Binding ElementName=paletteItem, Path=ToggleFavouriteCommand}"
                     CommandParameter="{Binding ElementName=paletteItem, Path=Palette}"
                     CommandParameter="{Binding ElementName=paletteItem, Path=Palette}"
-                    views:Translator.TooltipKey="ADD_TO_FAVORITES">
+                    ui:Translator.TooltipKey="ADD_TO_FAVORITES">
                     <Button.Style>
                     <Button.Style>
                         <Style BasedOn="{StaticResource ImageButtonStyle}" TargetType="Button">
                         <Style BasedOn="{StaticResource ImageButtonStyle}" TargetType="Button">
                             <Style.Triggers>
                             <Style.Triggers>
@@ -139,7 +140,7 @@
                 </Border.Style>
                 </Border.Style>
                 <Button Command="{Binding DeletePaletteCommand, ElementName=paletteItem}"
                 <Button Command="{Binding DeletePaletteCommand, ElementName=paletteItem}"
                         CommandParameter="{Binding ElementName=paletteItem, Path=Palette}"
                         CommandParameter="{Binding ElementName=paletteItem, Path=Palette}"
-                views:Translator.TooltipKey="DELETE" Width="24" Height="24" Margin="0"
+                ui:Translator.TooltipKey="DELETE" Width="24" Height="24" Margin="0"
                 Style="{StaticResource ToolButtonStyle}" Cursor="Hand">
                 Style="{StaticResource ToolButtonStyle}" Cursor="Hand">
                     <Button.Background>
                     <Button.Background>
                         <ImageBrush ImageSource="/Images/Trash.png"/>
                         <ImageBrush ImageSource="/Images/Trash.png"/>

+ 10 - 9
src/PixiEditor/Views/UserControls/Palettes/PaletteViewer.xaml

@@ -9,6 +9,7 @@
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters" xmlns:palettes="clr-namespace:PixiEditor.Views.UserControls.Palettes"
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters" xmlns:palettes="clr-namespace:PixiEditor.Views.UserControls.Palettes"
              xmlns:helpers="clr-namespace:PixiEditor.Helpers"
              xmlns:helpers="clr-namespace:PixiEditor.Helpers"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d" 
              mc:Ignorable="d" 
              d:DesignHeight="450" d:DesignWidth="300" Name="paletteControl">
              d:DesignHeight="450" d:DesignWidth="300" Name="paletteControl">
     <DockPanel>
     <DockPanel>
@@ -30,27 +31,27 @@
                                             Colors="{Binding ElementName=paletteControl, Path=Colors}"/>
                                             Colors="{Binding ElementName=paletteControl, Path=Colors}"/>
                     <StackPanel Margin="0, 0, 5, 0" HorizontalAlignment="Right" Width="110" VerticalAlignment="Center" Orientation="Horizontal">
                     <StackPanel Margin="0, 0, 5, 0" HorizontalAlignment="Right" Width="110" VerticalAlignment="Center" Orientation="Horizontal">
                         <Button Margin="0, 0, 5, 0" Style="{StaticResource ToolButtonStyle}" Click="BrowsePalettes_Click"
                         <Button Margin="0, 0, 5, 0" Style="{StaticResource ToolButtonStyle}" Click="BrowsePalettes_Click"
-                Cursor="Hand" Height="24" Width="24" views:Translator.TooltipKey="BROWSE_PALETTES">
+                Cursor="Hand" Height="24" Width="24" ui:Translator.TooltipKey="BROWSE_PALETTES">
                             <Button.Background>
                             <Button.Background>
                                 <ImageBrush ImageSource="/Images/Database.png"/>
                                 <ImageBrush ImageSource="/Images/Database.png"/>
                             </Button.Background>
                             </Button.Background>
                         </Button>
                         </Button>
                         <Button Margin="0, 0, 5, 0" Style="{StaticResource ToolButtonStyle}" 
                         <Button Margin="0, 0, 5, 0" Style="{StaticResource ToolButtonStyle}" 
-                Cursor="Hand" Height="24" Width="24" views:Translator.TooltipKey="LOAD_PALETTE" Click="ImportPalette_OnClick">
+                Cursor="Hand" Height="24" Width="24" ui:Translator.TooltipKey="LOAD_PALETTE" Click="ImportPalette_OnClick">
                             <Button.Background>
                             <Button.Background>
                                 <ImageBrush ImageSource="/Images/Folder.png"/>
                                 <ImageBrush ImageSource="/Images/Folder.png"/>
                             </Button.Background>
                             </Button.Background>
                         </Button>
                         </Button>
                         <Button Height="24" Width="24" Margin="0, 0, 2.5, 0" Style="{StaticResource ToolButtonStyle}"
                         <Button Height="24" Width="24" Margin="0, 0, 2.5, 0" Style="{StaticResource ToolButtonStyle}"
                                 IsEnabled="{Binding ElementName=paletteControl, Path=Colors.Count}"
                                 IsEnabled="{Binding ElementName=paletteControl, Path=Colors.Count}"
-                                Cursor="Hand" views:Translator.TooltipKey="SAVE_PALETTE" Click="SavePalette_OnClick">
+                                Cursor="Hand" ui:Translator.TooltipKey="SAVE_PALETTE" Click="SavePalette_OnClick">
                             <Button.Background>
                             <Button.Background>
                                 <ImageBrush ImageSource="/Images/Save.png"/>
                                 <ImageBrush ImageSource="/Images/Save.png"/>
                             </Button.Background>
                             </Button.Background>
                         </Button>
                         </Button>
                         <Button Height="24" Width="24" Margin="0, 0, 5, 0" Style="{StaticResource ToolButtonStyle}"
                         <Button Height="24" Width="24" Margin="0, 0, 5, 0" Style="{StaticResource ToolButtonStyle}"
                                 IsEnabled="{Binding ElementName=paletteControl, Path=Colors.Count}"
                                 IsEnabled="{Binding ElementName=paletteControl, Path=Colors.Count}"
-                                Cursor="Hand" views:Translator.TooltipKey="DISCARD_PALETTE" Click="DiscardPalette_OnClick">
+                                Cursor="Hand" ui:Translator.TooltipKey="DISCARD_PALETTE" Click="DiscardPalette_OnClick">
                             <Button.Background>
                             <Button.Background>
                                 <ImageBrush ImageSource="/Images/Trash.png"/>
                                 <ImageBrush ImageSource="/Images/Trash.png"/>
                             </Button.Background>
                             </Button.Background>
@@ -60,7 +61,7 @@
             </StackPanel>
             </StackPanel>
             <Separator Grid.Row="1" Margin="0, 0, 0, 0" BorderBrush="{StaticResource DarkerAccentColor}" BorderThickness="2" />
             <Separator Grid.Row="1" Margin="0, 0, 0, 0" BorderBrush="{StaticResource DarkerAccentColor}" BorderThickness="2" />
             <Grid Visibility="Hidden" Background="{StaticResource AccentColor}" Opacity="0.7" Grid.Row="2" Name="dragDropGrid">
             <Grid Visibility="Hidden" Background="{StaticResource AccentColor}" Opacity="0.7" Grid.Row="2" Name="dragDropGrid">
-                <TextBlock TextWrapping="Wrap" views:Translator.Key="DROP_PALETTE" Foreground="White" FontSize="32" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                <TextBlock TextWrapping="Wrap" ui:Translator.Key="DROP_PALETTE" Foreground="White" FontSize="32" HorizontalAlignment="Center" VerticalAlignment="Center"/>
             </Grid>
             </Grid>
             <ScrollViewer Grid.Row="2" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
             <ScrollViewer Grid.Row="2" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
                 <ItemsControl ItemsSource="{Binding Colors, ElementName=paletteControl}" AlternationCount="9999">
                 <ItemsControl ItemsSource="{Binding Colors, ElementName=paletteControl}" AlternationCount="9999">
@@ -84,7 +85,7 @@
                     <ItemsControl.ItemTemplate>
                     <ItemsControl.ItemTemplate>
                         <DataTemplate>
                         <DataTemplate>
                             <palettes:PaletteColorControl Cursor="Hand"
                             <palettes:PaletteColorControl Cursor="Hand"
-                                                   views:Translator.TooltipKey="PALETTE_COLOR_TOOLTIP"
+                                                   ui:Translator.TooltipKey="PALETTE_COLOR_TOOLTIP"
                                                    AllowDrop="True" Color="{Binding}"
                                                    AllowDrop="True" Color="{Binding}"
                                                Margin="2.5"
                                                Margin="2.5"
                                             Drop="PaletteColor_Drop"
                                             Drop="PaletteColor_Drop"
@@ -99,12 +100,12 @@
                                 </b:Interaction.Triggers>
                                 </b:Interaction.Triggers>
                                 <palettes:PaletteColorControl.ContextMenu>
                                 <palettes:PaletteColorControl.ContextMenu>
                                     <ContextMenu>
                                     <ContextMenu>
-                                        <MenuItem views:Translator.Key="CHOOSE" Foreground="White" Click="MenuItem_OnClick"
+                                        <MenuItem ui:Translator.Key="CHOOSE" Foreground="White" Click="MenuItem_OnClick"
                                               CommandParameter="{Binding}"/>
                                               CommandParameter="{Binding}"/>
-                                        <MenuItem views:Translator.Key="REMOVE" Foreground="White"
+                                        <MenuItem ui:Translator.Key="REMOVE" Foreground="White"
                                                   Click="RemoveColorMenuItem_OnClick"
                                                   Click="RemoveColorMenuItem_OnClick"
                                                   CommandParameter="{Binding}" />
                                                   CommandParameter="{Binding}" />
-                                        <MenuItem views:Translator.Key="REPLACE" Foreground="White"
+                                        <MenuItem ui:Translator.Key="REPLACE" Foreground="White"
                                                       CommandParameter="{Binding}"
                                                       CommandParameter="{Binding}"
                                                       Click="ReplaceColor_OnClick"/>
                                                       Click="ReplaceColor_OnClick"/>
                                     </ContextMenu>
                                     </ContextMenu>

+ 2 - 1
src/PixiEditor/Views/UserControls/SizeInput.xaml

@@ -8,6 +8,7 @@
              xmlns:behaviors="clr-namespace:PixiEditor.Helpers.Behaviours"
              xmlns:behaviors="clr-namespace:PixiEditor.Helpers.Behaviours"
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:views="clr-namespace:PixiEditor.Views"
              xmlns:views="clr-namespace:PixiEditor.Views"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d" Foreground="White" Focusable="True"
              mc:Ignorable="d" Foreground="White" Focusable="True"
              d:DesignHeight="30" Name="uc"
              d:DesignHeight="30" Name="uc"
              FlowDirection="LeftToRight">
              FlowDirection="LeftToRight">
@@ -55,7 +56,7 @@
             </TextBox>
             </TextBox>
             <Grid Grid.Column="1" Background="{Binding BorderBrush, ElementName=border}"
             <Grid Grid.Column="1" Background="{Binding BorderBrush, ElementName=border}"
                   d:Background="{StaticResource BrighterAccentColor}"/>
                   d:Background="{StaticResource BrighterAccentColor}"/>
-            <TextBlock views:Translator.Key="{Binding Unit, ElementName=uc, Converter={converters:EnumToStringConverter}}" TextAlignment="Right"
+            <TextBlock ui:Translator.Key="{Binding Unit, ElementName=uc, Converter={converters:EnumToStringConverter}}" TextAlignment="Right"
                        Grid.Column="2" Margin="5,0" VerticalAlignment="Center"
                        Grid.Column="2" Margin="5,0" VerticalAlignment="Center"
             />
             />
         </Grid>
         </Grid>

+ 6 - 5
src/PixiEditor/Views/UserControls/SizePicker.xaml

@@ -9,6 +9,7 @@
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:enums="clr-namespace:PixiEditor.Models.Enums"
              xmlns:enums="clr-namespace:PixiEditor.Models.Enums"
              xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
              xmlns:userControls="clr-namespace:PixiEditor.Views.UserControls"
+             xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
              mc:Ignorable="d" Background="Transparent"
              mc:Ignorable="d" Background="Transparent"
              d:DesignHeight="200" d:DesignWidth="240" Name="uc">
              d:DesignHeight="200" d:DesignWidth="240" Name="uc">
     <i:Interaction.Triggers>
     <i:Interaction.Triggers>
@@ -50,7 +51,7 @@
                                               Converter={converters:EnumBooleanConverter}, 
                                               Converter={converters:EnumBooleanConverter}, 
                                               ConverterParameter=Percentage,
                                               ConverterParameter=Percentage,
                                               Mode=TwoWay
                                               Mode=TwoWay
-                                              }" local:Translator.Key="PERCENTAGE"/>
+                                              }" ui:Translator.Key="PERCENTAGE"/>
                 <userControls:SizeInput Grid.Row="0" 
                 <userControls:SizeInput Grid.Row="0" 
                                      VerticalAlignment="Center"
                                      VerticalAlignment="Center"
                                      HorizontalAlignment="Right"
                                      HorizontalAlignment="Right"
@@ -80,7 +81,7 @@
                                               ElementName=uc, 
                                               ElementName=uc, 
                                               Converter={converters:EnumBooleanConverter},
                                               Converter={converters:EnumBooleanConverter},
                                               Mode=TwoWay,
                                               Mode=TwoWay,
-                                              ConverterParameter=Pixel}" local:Translator.Key="ABSOLUTE"/>
+                                              ConverterParameter=Pixel}" ui:Translator.Key="ABSOLUTE"/>
 
 
             </Grid>
             </Grid>
 
 
@@ -95,7 +96,7 @@
                     <RowDefinition />
                     <RowDefinition />
                 </Grid.RowDefinitions>
                 </Grid.RowDefinitions>
 
 
-                <TextBlock Grid.Column="0" Grid.Row="0" Foreground="Snow" local:Translator.Key="WIDTH" VerticalAlignment="Center" HorizontalAlignment="Left" />
+                <TextBlock Grid.Column="0" Grid.Row="0" Foreground="Snow" ui:Translator.Key="WIDTH" VerticalAlignment="Center" HorizontalAlignment="Left" />
                 <userControls:SizeInput Grid.Column="1" Grid.Row="0"
                 <userControls:SizeInput Grid.Column="1" Grid.Row="0"
                              x:Name="WidthPicker"
                              x:Name="WidthPicker"
                              IsEnabled="{Binding EditingEnabled, ElementName=uc}"
                              IsEnabled="{Binding EditingEnabled, ElementName=uc}"
@@ -108,7 +109,7 @@
                     </i:Interaction.Triggers>
                     </i:Interaction.Triggers>
                 </userControls:SizeInput>
                 </userControls:SizeInput>
 
 
-                <TextBlock Grid.Column="0" Grid.Row="1" Foreground="Snow" local:Translator.Key="HEIGHT" VerticalAlignment="Center" HorizontalAlignment="Left"/>
+                <TextBlock Grid.Column="0" Grid.Row="1" Foreground="Snow" ui:Translator.Key="HEIGHT" VerticalAlignment="Center" HorizontalAlignment="Left"/>
                 <userControls:SizeInput Grid.Column="1" Grid.Row="1"
                 <userControls:SizeInput Grid.Column="1" Grid.Row="1"
                              x:Name="HeightPicker" 
                              x:Name="HeightPicker" 
                              IsEnabled="{Binding EditingEnabled, ElementName=uc}"
                              IsEnabled="{Binding EditingEnabled, ElementName=uc}"
@@ -125,7 +126,7 @@
                   Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2"
                   Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2"
                   Name="aspectRatio" 
                   Name="aspectRatio" 
                   IsChecked="{Binding ElementName=uc, Path=PreserveAspectRatio}"
                   IsChecked="{Binding ElementName=uc, Path=PreserveAspectRatio}"
-                  local:Translator.Key="PRESERVE_ASPECT_RATIO"
+                  ui:Translator.Key="PRESERVE_ASPECT_RATIO"
                   Foreground="White" 
                   Foreground="White" 
                   HorizontalAlignment="Left" 
                   HorizontalAlignment="Left" 
                   VerticalAlignment="Center" />
                   VerticalAlignment="Center" />

+ 8 - 7
src/PixiEditor/Views/UserControls/Viewport.xaml

@@ -21,6 +21,7 @@
     xmlns:tools ="clr-namespace:PixiEditor.ViewModels.SubViewModels.Tools.Tools"
     xmlns:tools ="clr-namespace:PixiEditor.ViewModels.SubViewModels.Tools.Tools"
     xmlns:views="clr-namespace:PixiEditor.Views"
     xmlns:views="clr-namespace:PixiEditor.Views"
     xmlns:subviews="clr-namespace:PixiEditor.ViewModels.SubViewModels.Document"
     xmlns:subviews="clr-namespace:PixiEditor.ViewModels.SubViewModels.Document"
+    xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions"
     mc:Ignorable="d"
     mc:Ignorable="d"
     x:Name="vpUc"
     x:Name="vpUc"
     d:DesignHeight="450"
     d:DesignHeight="450"
@@ -48,7 +49,7 @@
                                         PassEventArgsToCommand="True"/>
                                         PassEventArgsToCommand="True"/>
             </i:EventTrigger>
             </i:EventTrigger>
         </i:Interaction.Triggers>
         </i:Interaction.Triggers>
-        <views:TogglableFlyout Margin="5" IconPath="/Images/Settings.png" views:Translator.TooltipKey="VIEWPORT_SETTINGS"
+        <views:TogglableFlyout Margin="5" IconPath="/Images/Settings.png" ui:Translator.TooltipKey="VIEWPORT_SETTINGS"
                                Panel.ZIndex="2" HorizontalAlignment="Right" VerticalAlignment="Top">
                                Panel.ZIndex="2" HorizontalAlignment="Right" VerticalAlignment="Top">
             <views:TogglableFlyout.Child>
             <views:TogglableFlyout.Child>
                 <Border BorderThickness="1" CornerRadius="5" Padding="5" Background="#C8202020" Panel.ZIndex="2">
                 <Border BorderThickness="1" CornerRadius="5" Padding="5" Background="#C8202020" Panel.ZIndex="2">
@@ -58,7 +59,7 @@
                        Text="{Binding Path=Angle, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, 
                        Text="{Binding Path=Angle, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, 
              Converter={converters:RadiansToDegreesConverter}, StringFormat={}{0}°}"
              Converter={converters:RadiansToDegreesConverter}, StringFormat={}{0}°}"
                        Width="35" Foreground="White" VerticalAlignment="Center" FontSize="16"/>
                        Width="35" Foreground="White" VerticalAlignment="Center" FontSize="16"/>
-            <Button Width="32" Height="32" views:Translator.TooltipKey="RESET_VIEWPORT"
+            <Button Width="32" Height="32" ui:Translator.TooltipKey="RESET_VIEWPORT"
                     Style="{StaticResource OverlayButton}"
                     Style="{StaticResource OverlayButton}"
                     Click="ResetViewportClicked"
                     Click="ResetViewportClicked"
                     Cursor="Hand">
                     Cursor="Hand">
@@ -69,7 +70,7 @@
         </StackPanel>
         </StackPanel>
             <Separator/>
             <Separator/>
             <StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
             <StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
-                <ToggleButton Width="32" Height="32" views:Translator.TooltipKey="TOGGLE_VERTICAL_SYMMETRY"
+                <ToggleButton Width="32" Height="32" ui:Translator.TooltipKey="TOGGLE_VERTICAL_SYMMETRY"
                         Style="{StaticResource OverlayToggleButton}"
                         Style="{StaticResource OverlayToggleButton}"
                         IsChecked="{Binding Document.VerticalSymmetryAxisEnabledBindable, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, Mode=TwoWay}"
                         IsChecked="{Binding Document.VerticalSymmetryAxisEnabledBindable, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, Mode=TwoWay}"
                         Cursor="Hand">
                         Cursor="Hand">
@@ -77,7 +78,7 @@
                         <Image Width="28" Height="28" Source="/Images/SymmetryVertical.png"/>
                         <Image Width="28" Height="28" Source="/Images/SymmetryVertical.png"/>
                     </ToggleButton.Content>
                     </ToggleButton.Content>
                 </ToggleButton>
                 </ToggleButton>
-                <ToggleButton Margin="10 0 0 0" Width="32" Height="32" views:Translator.TooltipKey="TOGGLE_HORIZONTAL_SYMMETRY"
+                <ToggleButton Margin="10 0 0 0" Width="32" Height="32" ui:Translator.TooltipKey="TOGGLE_HORIZONTAL_SYMMETRY"
                               Style="{StaticResource OverlayToggleButton}"
                               Style="{StaticResource OverlayToggleButton}"
                               IsChecked="{Binding Document.HorizontalSymmetryAxisEnabledBindable, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, Mode=TwoWay}"
                               IsChecked="{Binding Document.HorizontalSymmetryAxisEnabledBindable, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, Mode=TwoWay}"
                               Cursor="Hand">
                               Cursor="Hand">
@@ -92,7 +93,7 @@
             </StackPanel>
             </StackPanel>
             <Separator/>
             <Separator/>
             <StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
             <StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
-                <ToggleButton Width="32" Height="32" views:Translator.TooltipKey="FLIP_VIEWPORT_HORIZONTALLY"
+                <ToggleButton Width="32" Height="32" ui:Translator.TooltipKey="FLIP_VIEWPORT_HORIZONTALLY"
                               Style="{StaticResource OverlayToggleButton}"
                               Style="{StaticResource OverlayToggleButton}"
                               IsChecked="{Binding FlipX, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, Mode=TwoWay}"
                               IsChecked="{Binding FlipX, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, Mode=TwoWay}"
                               Cursor="Hand">
                               Cursor="Hand">
@@ -100,7 +101,7 @@
                         <Image Width="28" Height="28" Source="/Images/FlipHorizontal.png"/>
                         <Image Width="28" Height="28" Source="/Images/FlipHorizontal.png"/>
                     </ToggleButton.Content>
                     </ToggleButton.Content>
                 </ToggleButton>
                 </ToggleButton>
-                <ToggleButton Margin="10 0 0 0" Width="32" Height="32" views:Translator.TooltipKey="FLIP_VIEWPORT_VERTICALLY"
+                <ToggleButton Margin="10 0 0 0" Width="32" Height="32" ui:Translator.TooltipKey="FLIP_VIEWPORT_VERTICALLY"
                               Style="{StaticResource OverlayToggleButton}"
                               Style="{StaticResource OverlayToggleButton}"
                               IsChecked="{Binding FlipY, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, Mode=TwoWay}"
                               IsChecked="{Binding FlipY, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:Viewport}, Mode=TwoWay}"
                               Cursor="Hand">
                               Cursor="Hand">
@@ -420,7 +421,7 @@
                 </MultiBinding>
                 </MultiBinding>
             </Button.Visibility>
             </Button.Visibility>
             <StackPanel Orientation="Horizontal">
             <StackPanel Orientation="Horizontal">
-                <TextBlock views:Translator.Key="APPLY_TRANSFORM" VerticalAlignment="Center" Margin="0,0,5,0" />
+                <TextBlock ui:Translator.Key="APPLY_TRANSFORM" VerticalAlignment="Center" Margin="0,0,5,0" />
                 <Border Padding="10,3" CornerRadius="5" Background="{StaticResource AccentColor}" Visibility="{cmds:ShortcutBinding PixiEditor.Tools.ApplyTransform, Converter={converters:NotNullToVisibilityConverter}}">
                 <Border Padding="10,3" CornerRadius="5" Background="{StaticResource AccentColor}" Visibility="{cmds:ShortcutBinding PixiEditor.Tools.ApplyTransform, Converter={converters:NotNullToVisibilityConverter}}">
                     <TextBlock Text="{cmds:ShortcutBinding PixiEditor.Tools.ApplyTransform}" />
                     <TextBlock Text="{cmds:ShortcutBinding PixiEditor.Tools.ApplyTransform}" />
                 </Border>
                 </Border>

+ 7 - 3
src/SampleExtension/SampleExtension.cs

@@ -1,7 +1,7 @@
-using System.Reflection;
+using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Controls;
+using System.Windows.Media;
 using PixiEditor.Extensions;
 using PixiEditor.Extensions;
-using PixiEditor.Extensions.Palettes;
 
 
 namespace SampleExtension;
 namespace SampleExtension;
 
 
@@ -13,7 +13,11 @@ public class SampleExtension : Extension
 
 
     protected override void OnInitialized()
     protected override void OnInitialized()
     {
     {
-        var popup = Api.WindowProvider.CreatePopupWindow("Hello World!", new TextBlock { Text = "Hello World!" });
+        var popup = Api.WindowProvider.CreatePopupWindow("Hello World!", new TextBlock
+        {
+            Text = "Hello World!", Foreground = Brushes.White,
+            HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center
+        });
         Api.PaletteProvider.RegisterDataSource(new TestPaletteDataSource());
         Api.PaletteProvider.RegisterDataSource(new TestPaletteDataSource());
         popup.ShowDialog();
         popup.ShowDialog();
     }
     }