|
|
@@ -0,0 +1,623 @@ |
|
|
// based on http://robrelyea.wordpress.com/2007/02/10/winforms-xaml/ |
|
|
// converted to an Extension Method by @CADbloke |
|
|
// a list: http://msdn.microsoft.com/en-us/library/ms750559(v=vs.110).aspx |
|
|
// here's moar code:http://wf2wpf.codeplex.com/SourceControl/latest but it converts source files, not actual controls. |
|
|
// Here's a site that does code too http://www.win2wpf.com/ |
|
|
// http://www.codeproject.com/Articles/25795/Creating-the-Same-Program-in-Windows-Forms-and-WPF |
|
|
// ReSharper disable SpecifyACultureInStringConversionExplicitly |
|
|
|
|
|
|
|
|
using System; |
|
|
using System.Collections.Generic; |
|
|
using System.ComponentModel; |
|
|
using System.Drawing; |
|
|
using System.Reflection; |
|
|
using System.Text; |
|
|
using System.Text.RegularExpressions; |
|
|
using System.Windows.Forms; |
|
|
using Color = System.Drawing.Color; |
|
|
using System.Linq; |
|
|
|
|
|
namespace Cadbloke.Common.Extensions.WindowsForms |
|
|
{ |
|
|
/// <summary> Converts <seealso cref="System.Windows.Forms.Control"/>s to WPF XAML. </summary> |
|
|
/// <seealso cref="T:System.Windows.Forms.UserControl"/> |
|
|
/// <seealso cref="T:System.Windows.Forms.Form"/> |
|
|
internal static class WindowsFormsToWpfXamlConverter |
|
|
{ |
|
|
/// <summary> Generates the WPF XAML equivalent for a <see cref="System.Windows.Forms.Control"/> |
|
|
/// and its children. The XAML won't be perfect - you will need to edit it. A lot. |
|
|
/// Some <see cref="System.Windows.Forms.Control"/>s may not convert and will be called the wrong type. |
|
|
/// You will see a lot more Events than you probably want. They are easier to delete than to create so quit yer whinging. |
|
|
/// You should be able to use most of your existing code-behind. In theory |
|
|
/// The XAML will also (optionally) be on the Windows Clipboard, paste it into your text editor. </summary> |
|
|
/// <param name="windowsControl"> The <see cref="System.Windows.Forms.Form"/> to be converted to XAML. </param> |
|
|
/// <param name="toolTipProvider">Optional. Your <seealso cref="ToolTip"/> component. Provides the tooltips.</param> |
|
|
/// <param name="includeAllFromParentFormOrUserControl"> XAML includes Everything in the Top parent container. |
|
|
/// Default is true</param> |
|
|
/// <param name="doColorsAndFontsForEveryIndividualControl">True if you want all the <seealso cref="Font"/> and |
|
|
/// <seealso cref="Color"/> information for each and every control, |
|
|
/// rather than going with the overall defaults. Default is False. </param> |
|
|
/// <param name="copyXamlToClipboard">True if you want the XAML in the Windows Clipboard to paste into an editor. |
|
|
/// Default is true</param> |
|
|
/// <param name="doEvents">True if you want the <see cref="System.Windows.Forms"/> Events translated into XAML. Default is true.</param> |
|
|
/// <param name="eventsToExclude">List any <see cref="System.Windows.Forms"/> or WPF Events you don't want to see in XAML.</param> |
|
|
/// <param name="eventsToInclude">List any <see cref="System.Windows.Forms"/> or WPF Events you DO want to see in XAML. |
|
|
/// All others are ignored.</param> |
|
|
/// <param name="regexOfEventsToInclude">Now you have two problems. Trumps <see cref="eventsToInclude"/></param> |
|
|
/// <returns> The generated WPF XAML as a string. </returns> |
|
|
public static string ConvertWinFormsControlToXaml (this Control windowsControl, |
|
|
ToolTip toolTipProvider = null, |
|
|
bool includeAllFromParentFormOrUserControl = true, |
|
|
bool doColorsAndFontsForEveryIndividualControl = false, |
|
|
bool copyXamlToClipboard = true, |
|
|
bool doEvents = true, |
|
|
string[] eventsToExclude = null, |
|
|
string[] eventsToInclude = null, |
|
|
string regexOfEventsToInclude = null) |
|
|
{ |
|
|
if (windowsControl == null) return string.Empty; |
|
|
|
|
|
_toolTipProvider = toolTipProvider; |
|
|
_includeAllFromParentFormOrUserControl = includeAllFromParentFormOrUserControl; |
|
|
_doColorsAndFontsForEveryIndividualControl = doColorsAndFontsForEveryIndividualControl; |
|
|
_copyXamlToClipboard = copyXamlToClipboard; |
|
|
_doEvents = doEvents; |
|
|
_eventsToExclude = eventsToExclude; |
|
|
_eventsToInclude = eventsToInclude; |
|
|
_regexOfEventsToInclude = regexOfEventsToInclude; |
|
|
|
|
|
|
|
|
wpfBuilder.Clear(); |
|
|
|
|
|
Control topParent = windowsControl; |
|
|
while ((topParent.Parent != null) && !(topParent is UserControl || topParent is Form)) topParent = topParent.Parent; |
|
|
|
|
|
if (_includeAllFromParentFormOrUserControl) windowsControl = topParent; |
|
|
|
|
|
wpfBuilder.AppendLine("<Page xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\""); |
|
|
wpfBuilder.AppendLine("xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\""); |
|
|
wpfBuilder.AppendLine("xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" "); |
|
|
wpfBuilder.AppendLine("xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\""); |
|
|
wpfBuilder.AppendLine("d:DesignHeight=\"" + windowsControl.Size.Width + |
|
|
"\" d:DesignWidth=\"" + windowsControl.Size.Height + "\""); |
|
|
|
|
|
// ReSharper disable SpecifyACultureInStringConversionExplicitly |
|
|
WriteBrushAttribute("Background" , windowsControl.BackColor,"0"); |
|
|
WriteBrushAttribute("Foreground" , windowsControl.ForeColor,"ControlText"); |
|
|
WriteAttribute ("Width" , windowsControl.Size.Width.ToString(),"0"); |
|
|
WriteAttribute ("Height" , windowsControl.Size.Height.ToString(),"0"); |
|
|
// ReSharper restore SpecifyACultureInStringConversionExplicitly |
|
|
|
|
|
WriteEvents<Control>(windowsControl); |
|
|
|
|
|
wpfBuilder.AppendLine(">"); |
|
|
wpfBuilder.AppendLine(" <StackPanel>"); |
|
|
wpfBuilder.AppendLine(" <StackPanel>"); // I can explain...wait, no. It's to do with the Regex replacement below. |
|
|
|
|
|
|
|
|
WalkControls(windowsControl); |
|
|
wpfBuilder.AppendLine(" </StackPanel>"); |
|
|
wpfBuilder.AppendLine(" </StackPanel>"); // I can explain...wait, no. |
|
|
wpfBuilder.AppendLine("</Page>"); |
|
|
|
|
|
string xaml = wpfBuilder.ToString(); |
|
|
|
|
|
string xamlWithoutEmptyStackPanels = Regex.Replace(xaml, @"<StackPanel>\W+</StackPanel>", "", RegexOptions.IgnoreCase); |
|
|
|
|
|
if (_copyXamlToClipboard) Clipboard.SetData(DataFormats.Text, xamlWithoutEmptyStackPanels); |
|
|
|
|
|
return xamlWithoutEmptyStackPanels; |
|
|
} |
|
|
|
|
|
|
|
|
// =============================== done. Now start deleting stuff ================= |
|
|
|
|
|
|
|
|
/// <summary> Iterates through a Control and its children to populate a your XAMLs. </summary> |
|
|
/// <param name="parentControl"> The <see cref="Control"/> to convert to XAML, along with its children. </param> |
|
|
private static void WalkControls(Control parentControl ) |
|
|
{ |
|
|
foreach (Control control in parentControl.Controls) |
|
|
{ |
|
|
if (control.HasChildren ) wpfBuilder.AppendLine(" </StackPanel>"); // ungrouped controls on a WinForm need a container |
|
|
|
|
|
wpfBuilder.Append(" <" + controlsTranslator[control.GetType().Name].ToList().FirstOrDefault()); |
|
|
|
|
|
WriteAttribute("Name", control.Name, ""); |
|
|
|
|
|
if ( _doColorsAndFontsForEveryIndividualControl ) |
|
|
{ |
|
|
WriteBrushAttribute("Background", control.BackColor, "0"); |
|
|
WriteBrushAttribute("Foreground", control.ForeColor, "ControlText"); |
|
|
wpfBuilder.Append(" FontSize=\"" + control.Font.SizeInPoints + "pt\""); |
|
|
wpfBuilder.Append(" FontFamily=\"" + control.Font.FontFamily.Name + "\""); |
|
|
} |
|
|
|
|
|
WriteAttribute("Width", control.Size.Width.ToString(), "0"); |
|
|
WriteAttribute("Height", control.Size.Height.ToString(), "0"); |
|
|
WriteAttribute("TabIndex", control.TabIndex.ToString(), "0"); |
|
|
|
|
|
WriteAttribute("VerticalAlignment", (control.Anchor & AnchorStyles.Bottom) == control.Anchor ? "Bottom" : "Top", "x"); |
|
|
WriteAttribute("HorizontalAlignment", (control.Anchor & AnchorStyles.Right) == control.Anchor ? "Right" : "Left", "x"); |
|
|
|
|
|
WriteAttribute((control is GroupBox) ? "Header" : "Content", control.Text.Replace(@"&", "_"), ""); // & _ == shortcut key |
|
|
|
|
|
|
|
|
string tag = string.Empty; |
|
|
// ReSharper disable once EmptyGeneralCatchClause |
|
|
try { tag = control.Tag.ToString(); } catch (Exception) {/*meh, no Tag*/ } |
|
|
if(tag.Length >0) WriteAttribute("Tag" , tag, ""); |
|
|
|
|
|
if(_toolTipProvider != null) |
|
|
WriteAttribute("ToolTip", _toolTipProvider.GetToolTip(control).Replace("\"", ""), ""); |
|
|
|
|
|
WriteEvents<Control>(control); |
|
|
|
|
|
if ( control.HasChildren ) |
|
|
{ |
|
|
wpfBuilder.AppendLine(">"); |
|
|
wpfBuilder.AppendLine(" <StackPanel>"); |
|
|
|
|
|
WalkControls(control); |
|
|
|
|
|
wpfBuilder.AppendLine(" </StackPanel>"); |
|
|
|
|
|
wpfBuilder.AppendLine(" </" + controlsTranslator[control.GetType().Name].ToList().FirstOrDefault() + ">"); |
|
|
wpfBuilder.AppendLine(" <StackPanel>"); // ungrouped controls on a WinForm need a container |
|
|
} |
|
|
else wpfBuilder.AppendLine(" />"); |
|
|
} |
|
|
} |
|
|
|
|
|
/// <summary> Writes a XAML attribute. </summary> |
|
|
/// <param name="attributeName"> The name of the Attribute. </param> |
|
|
/// <param name="attributeValue"> The value of the Attribute. </param> |
|
|
/// <param name="defaultValue"> The default value. Attribute is not written if it has the default value</param> |
|
|
private static void WriteAttribute(string attributeName, string attributeValue, string defaultValue) |
|
|
{ |
|
|
if (attributeValue != defaultValue) |
|
|
wpfBuilder.AppendLine(" " + attributeName + "=\"" + attributeValue + "\""); |
|
|
} |
|
|
|
|
|
|
|
|
/// <summary> Writes a XAML brush attribute. </summary> |
|
|
/// <param name="brushName"> The name of the Attribute. </param> |
|
|
/// <param name="brushValue"> The value of the Attribute. </param> |
|
|
/// <param name="defaultValue"> The default value. Attribute is not written if it has the default value. </param> |
|
|
private static void WriteBrushAttribute(string brushName, Color brushValue, string defaultValue) |
|
|
{ |
|
|
string finalValue = brushValue.ToKnownColor().ToString(); |
|
|
|
|
|
if (brushValue.IsNamedColor) |
|
|
{ |
|
|
if (finalValue == "Window") finalValue = "{x:Static SystemColors.WindowBrush}"; |
|
|
else if (finalValue == "ControlText") finalValue = defaultValue; |
|
|
else if (finalValue == "ActiveCaption") finalValue = "{x:Static SystemColors.ActiveCaptionBrush}"; |
|
|
else if (finalValue == "WindowText") finalValue = "{x:Static SystemColors.WindowTextBrush}"; |
|
|
|
|
|
WriteAttribute(brushName, finalValue, defaultValue); |
|
|
} |
|
|
|
|
|
else |
|
|
{ |
|
|
StringBuilder colorBuilder = new StringBuilder(); |
|
|
colorBuilder.Append("#"); |
|
|
colorBuilder.AppendFormat("{0:X2}", brushValue.R); |
|
|
colorBuilder.AppendFormat("{0:X2}", brushValue.G); |
|
|
colorBuilder.AppendFormat("{0:X2}", brushValue.B); |
|
|
WriteAttribute(brushName, colorBuilder.ToString(), defaultValue); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary> Writes the events of the control, translating the names from |
|
|
/// <seealso cref="System.Windows.Forms"/> to XAML. |
|
|
/// Also - you know abou WPF Triggers, right?</summary> |
|
|
/// <param name="windowsControl"> The <see cref="System.Windows.Forms.Control"/> whose Events get converted to XAML. </param> |
|
|
private static void WriteEvents<T>(Control windowsControl) // where T : Control |
|
|
{ // http://stackoverflow.com/questions/660480/determine-list-of-event-handlers-bound-to-event/660489#660489 |
|
|
if (!_doEvents) return; |
|
|
|
|
|
EventHandlerList eventsHandlersList = (EventHandlerList) typeof (T) |
|
|
.GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static) |
|
|
.GetValue(windowsControl, null); |
|
|
|
|
|
FieldInfo[] fields = typeof(T).GetFields(BindingFlags.NonPublic | BindingFlags.Static| BindingFlags.Instance | BindingFlags.FlattenHierarchy); |
|
|
|
|
|
|
|
|
|
|
|
if (windowsControl is CheckBox) |
|
|
{ |
|
|
FieldInfo[] moarFields = { |
|
|
typeof(CheckBox).GetField("EVENT_CHECKEDCHANGED",BindingFlags.NonPublic | BindingFlags.Static| BindingFlags.Instance | BindingFlags.FlattenHierarchy), |
|
|
typeof(CheckBox).GetField("EVENT_CHECKSTATECHANGED", BindingFlags.NonPublic | BindingFlags.Static| BindingFlags.Instance | BindingFlags.FlattenHierarchy) |
|
|
}; |
|
|
Array.Resize(ref fields,fields.Length + moarFields.Length); |
|
|
moarFields.CopyTo(fields,fields.Length - moarFields.Length); |
|
|
} |
|
|
|
|
|
foreach (var fieldInfo in fields) |
|
|
{ |
|
|
string fieldName = fieldInfo.Name; |
|
|
if (fieldInfo.Name.ToLower().Contains("event")) |
|
|
{ |
|
|
FieldInfo field; // Yes, for reals - how very special. http://stackoverflow.com/a/27413251/492 |
|
|
if (windowsControl is CheckBox && (fieldName.Contains("EVENT_CHECKEDCHANGED") || fieldName.Contains("EVENT_CHECKSTATECHANGED"))) |
|
|
field = typeof(CheckBox).GetField(fieldInfo.Name, BindingFlags.NonPublic | BindingFlags.Static | |
|
|
BindingFlags.Instance | BindingFlags.FlattenHierarchy); |
|
|
else |
|
|
field = typeof(T).GetField(fieldInfo.Name, BindingFlags.NonPublic | BindingFlags.Static | |
|
|
BindingFlags.Instance | BindingFlags.FlattenHierarchy); |
|
|
|
|
|
|
|
|
if (field != null) |
|
|
{ |
|
|
// if (field.IsStatic) |
|
|
object key =field.IsStatic ? fieldInfo.GetValue(null): field.GetValue(windowsControl); |
|
|
|
|
|
if (key != null) |
|
|
{ |
|
|
Delegate eventHandlers = eventsHandlersList[key]; |
|
|
|
|
|
if (eventHandlers != null) |
|
|
{ |
|
|
|
|
|
var eventsList = new HashSet<Tuple<string, string>>(); |
|
|
|
|
|
foreach ( Delegate eventHandler in eventHandlers.GetInvocationList() ) |
|
|
{ |
|
|
MethodInfo method = eventHandler.Method; |
|
|
if ( method != null ) // && method.DeclaringType != null) |
|
|
{ |
|
|
string winFormsEventName = fieldInfo.Name; |
|
|
string methodName = method.Name; |
|
|
|
|
|
// internal name is not consistent. eg {"EventEnabled", "EnabledChanged"}, ("EventMarginChanged", "MarginChanged"} |
|
|
string winFormsEventExternalName = winFormsEventName.Replace("Event", "").Replace("EVENT", "").Replace("_", ""); |
|
|
List<string> eventTranslations = eventsTranslator[winFormsEventExternalName].ToList(); |
|
|
eventTranslations.AddRange( |
|
|
eventsTranslator[winFormsEventExternalName.Replace("Changed", "").Replace("CHANGED", "")].ToList()); |
|
|
eventTranslations.AddRange(eventsTranslator[winFormsEventExternalName + "Changed"].ToList()); |
|
|
eventTranslations.AddRange(eventsTranslator[winFormsEventExternalName + "CHANGED"].ToList()); |
|
|
|
|
|
if ( !eventTranslations.Any() ) { eventTranslations.Add("WINDOWS.FORMS___" + winFormsEventName); } |
|
|
|
|
|
foreach ( string translatedWpfEventName in eventTranslations ) |
|
|
{ |
|
|
string cleanWpfEventName = translatedWpfEventName.Replace("WINDOWS.FORMS___", ""); |
|
|
|
|
|
if ( _regexOfEventsToInclude != null && Regex.IsMatch(cleanWpfEventName, _regexOfEventsToInclude) ) |
|
|
{ |
|
|
eventsList.Add(new Tuple<string, string>(translatedWpfEventName,methodName)); |
|
|
continue; |
|
|
} |
|
|
|
|
|
if ( _eventsToExclude != null |
|
|
&& (_eventsToExclude.Contains(cleanWpfEventName) || _eventsToExclude.Contains(winFormsEventExternalName)) ) continue; |
|
|
|
|
|
if ( _eventsToInclude != null |
|
|
&& !(_eventsToInclude.Contains(cleanWpfEventName) || _eventsToInclude.Contains(winFormsEventExternalName)) ) continue; |
|
|
|
|
|
eventsList.Add(new Tuple<string, string>(translatedWpfEventName,methodName)); |
|
|
} |
|
|
} |
|
|
} |
|
|
// write events |
|
|
foreach ( var eventDescription in eventsList ) WriteAttribute(eventDescription.Item1, eventDescription.Item2, ""); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// =================== My Privates =========================== |
|
|
|
|
|
|
|
|
/// This is what we build the XAML with.. |
|
|
private static StringBuilder wpfBuilder = new StringBuilder(); |
|
|
|
|
|
|
|
|
|
|
|
/// Optional. Your <seealso cref="ToolTip"/> component. Provides the tooltips. |
|
|
private static ToolTip _toolTipProvider; |
|
|
|
|
|
/// XAML includes Everything in the Top parent container. Default is true |
|
|
private static bool _includeAllFromParentFormOrUserControl; |
|
|
|
|
|
/// True if you want all the <seealso cref="Font"/> and <seealso cref="Color"/> |
|
|
/// information for each and every control, rather than going with the overall defaults. Default is False. |
|
|
private static bool _doColorsAndFontsForEveryIndividualControl; |
|
|
|
|
|
/// True if you want the XAML in the Windows Clipboard to paste into an editor. Default is true |
|
|
private static bool _copyXamlToClipboard; |
|
|
|
|
|
/// True if you want the <see cref="System.Windows.Forms"/> Events translated into XAML. Default is true. |
|
|
private static bool _doEvents; |
|
|
|
|
|
/// List any <see cref="System.Windows.Forms"/> or WPF Events you don't want to see in XAML. |
|
|
private static string[] _eventsToExclude; |
|
|
|
|
|
/// List any <see cref="System.Windows.Forms"/> or WPF Events you DO want to see in XAML. All others are ignored. |
|
|
private static string[] _eventsToInclude; |
|
|
|
|
|
/// Now you have two problems. Trumps <see cref="_eventsToInclude"/> |
|
|
private static string _regexOfEventsToInclude; |
|
|
|
|
|
|
|
|
private struct WinFormsToWpfTranslator |
|
|
{ |
|
|
internal WinFormsToWpfTranslator(string winName, string wpfName) : this() |
|
|
{ |
|
|
winformsName = winName; |
|
|
this.wpfName = wpfName; |
|
|
} |
|
|
internal string winformsName { get; private set; } |
|
|
internal string wpfName { get; private set; } |
|
|
} |
|
|
|
|
|
|
|
|
private static Lookup<string, string> eventsTranslator |
|
|
{ |
|
|
get { return (Lookup<string, string>)eventsTxList.ToLookup(p => p.winformsName,p => p.wpfName);} |
|
|
} |
|
|
#region EventsTranslations |
|
|
private static List<WinFormsToWpfTranslator> eventsTxList = new List<WinFormsToWpfTranslator> |
|
|
{ |
|
|
new WinFormsToWpfTranslator("Click" , "Click" ), |
|
|
new WinFormsToWpfTranslator("BindingContextChanged" , "DataContextChanged" ), |
|
|
new WinFormsToWpfTranslator("ContextMenuChanged" , "ContextMenuClosing" ), |
|
|
new WinFormsToWpfTranslator("ContextMenuChanged" , "ContextMenuOpening" ), |
|
|
new WinFormsToWpfTranslator("ContextMenuStripChanged" , "ContextMenuClosing" ), |
|
|
new WinFormsToWpfTranslator("ContextMenuStripChanged" , "ContextMenuOpening" ), |
|
|
new WinFormsToWpfTranslator("ControlRemoved" , "Unloaded" ), |
|
|
new WinFormsToWpfTranslator("CursorChanged" , "QueryCursor" ), |
|
|
new WinFormsToWpfTranslator("Disposed" , "Unloaded" ), |
|
|
new WinFormsToWpfTranslator("DockChanged" , "ManipulationCompleted" ), |
|
|
new WinFormsToWpfTranslator("DoubleClick" , "MouseDoubleClick" ), |
|
|
new WinFormsToWpfTranslator("DoubleClick" , "PreviewMouseDoubleClick" ), |
|
|
new WinFormsToWpfTranslator("DragDrop" , "Drop" ), |
|
|
new WinFormsToWpfTranslator("DragDrop" , "PreviewDrop" ), |
|
|
new WinFormsToWpfTranslator("DragEnter" , "DragEnter" ), |
|
|
new WinFormsToWpfTranslator("DragEnter" , "PreviewDragEnter" ), |
|
|
new WinFormsToWpfTranslator("DragLeave" , "DragLeave" ), |
|
|
new WinFormsToWpfTranslator("DragLeave" , "PreviewDragLeave" ), |
|
|
new WinFormsToWpfTranslator("DragOver" , "DragOver" ), |
|
|
new WinFormsToWpfTranslator("DragOver" , "PreviewDragOver" ), |
|
|
new WinFormsToWpfTranslator("EnabledChanged" , "IsEnabledChanged" ), |
|
|
new WinFormsToWpfTranslator("Enter" , "PreviewStylusInRange" ), |
|
|
new WinFormsToWpfTranslator("Enter" , "StylusEnter" ), |
|
|
new WinFormsToWpfTranslator("Enter" , "StylusInRange" ), |
|
|
new WinFormsToWpfTranslator("Enter" , "TouchEnter" ), |
|
|
new WinFormsToWpfTranslator("GiveFeedback" , "GiveFeedback" ), |
|
|
new WinFormsToWpfTranslator("GiveFeedback" , "PreviewGiveFeedback" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "GotFocus" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "GotKeyboardFocus" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "GotMouseCapture" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "GotStylusCapture" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "GotTouchCapture" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "IsKeyboardFocusedChanged" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "IsKeyboardFocusWithinChanged" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "IsMouseCapturedChanged" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "IsMouseCaptureWithinChanged" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "IsStylusCapturedChanged" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "IsStylusCaptureWithinChanged" ), |
|
|
new WinFormsToWpfTranslator("GotFocus" , "PreviewGotKeyboardFocus" ), |
|
|
new WinFormsToWpfTranslator("KeyDown" , "KeyDown" ), |
|
|
new WinFormsToWpfTranslator("KeyPress" , "KeyDown" ), |
|
|
new WinFormsToWpfTranslator("KeyUp" , "KeyUp" ), |
|
|
new WinFormsToWpfTranslator("KeyUp" , "PreviewKeyUp" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "IsKeyboardFocusedChanged" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "IsKeyboardFocusWithinChanged" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "IsMouseCapturedChanged" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "IsMouseCaptureWithinChanged" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "IsStylusCapturedChanged" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "IsStylusCaptureWithinChanged" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "LostFocus" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "LostKeyboardFocus" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "LostMouseCapture" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "LostStylusCapture" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "LostTouchCapture" ), |
|
|
new WinFormsToWpfTranslator("LostFocus" , "PreviewLostKeyboardFocus" ), |
|
|
new WinFormsToWpfTranslator("MarginChanged" , "ManipulationCompleted" ), |
|
|
new WinFormsToWpfTranslator("MouseCaptureChanged" , "StylusOutOfRange" ), |
|
|
new WinFormsToWpfTranslator("MouseClick" , "Click" ), |
|
|
new WinFormsToWpfTranslator("MouseClick" , "MouseDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDoubleClick" , "MouseDoubleClick" ), |
|
|
new WinFormsToWpfTranslator("MouseDoubleClick" , "PreviewMouseDoubleClick" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "MouseDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "MouseLeftButtonDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "MouseRightButtonDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "PreviewMouseDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "PreviewMouseLeftButtonDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "PreviewMouseRightButtonDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "PreviewStylusButtonDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "PreviewStylusDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "PreviewTouchDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "StylusButtonDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "StylusDown" ), |
|
|
new WinFormsToWpfTranslator("MouseDown" , "TouchDown" ), |
|
|
new WinFormsToWpfTranslator("MouseEnter" , "MouseEnter" ), |
|
|
new WinFormsToWpfTranslator("MouseEnter" , "PreviewStylusInRange" ), |
|
|
new WinFormsToWpfTranslator("MouseEnter" , "StylusEnter" ), |
|
|
new WinFormsToWpfTranslator("MouseEnter" , "StylusInRange" ), |
|
|
new WinFormsToWpfTranslator("MouseEnter" , "TouchEnter" ), |
|
|
new WinFormsToWpfTranslator("MouseHover" , "IsMouseDirectlyOverChanged" ), |
|
|
new WinFormsToWpfTranslator("MouseHover" , "IsStylusDirectlyOverChanged" ), |
|
|
new WinFormsToWpfTranslator("MouseHover" , "PreviewStylusInAirMove" ), |
|
|
new WinFormsToWpfTranslator("MouseLeave" , "MouseLeave" ), |
|
|
new WinFormsToWpfTranslator("MouseLeave" , "PreviewStylusOutOfRange" ), |
|
|
new WinFormsToWpfTranslator("MouseLeave" , "StylusLeave" ), |
|
|
new WinFormsToWpfTranslator("MouseLeave" , "TouchLeave" ), |
|
|
new WinFormsToWpfTranslator("MouseMove" , "MouseMove" ), |
|
|
new WinFormsToWpfTranslator("MouseMove" , "PreviewMouseMove" ), |
|
|
new WinFormsToWpfTranslator("MouseMove" , "PreviewStylusMove" ), |
|
|
new WinFormsToWpfTranslator("MouseMove" , "PreviewTouchMove" ), |
|
|
new WinFormsToWpfTranslator("MouseMove" , "StylusInAirMove" ), |
|
|
new WinFormsToWpfTranslator("MouseMove" , "StylusMove" ), |
|
|
new WinFormsToWpfTranslator("MouseMove" , "TouchMove" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "MouseLeftButtonUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "MouseRightButtonUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "MouseUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "PreviewMouseLeftButtonUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "PreviewMouseRightButtonUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "PreviewMouseUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "PreviewStylusButtonUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "PreviewStylusUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "PreviewTouchUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "StylusButtonUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "StylusUp" ), |
|
|
new WinFormsToWpfTranslator("MouseUp" , "TouchUp" ), |
|
|
new WinFormsToWpfTranslator("MouseWheel" , "MouseWheel" ), |
|
|
new WinFormsToWpfTranslator("MouseWheel" , "PreviewMouseWheel" ), |
|
|
new WinFormsToWpfTranslator("Move" , "ManipulationBoundaryFeedback" ), |
|
|
new WinFormsToWpfTranslator("Move" , "ManipulationCompleted" ), |
|
|
new WinFormsToWpfTranslator("Move" , "ManipulationDelta" ), |
|
|
new WinFormsToWpfTranslator("Move" , "ManipulationInertiaStarting" ), |
|
|
new WinFormsToWpfTranslator("Move" , "ManipulationStarted" ), |
|
|
new WinFormsToWpfTranslator("Move" , "ManipulationStarting" ), |
|
|
new WinFormsToWpfTranslator("PaddingChanged" , "ManipulationBoundaryFeedback" ), |
|
|
new WinFormsToWpfTranslator("PaddingChanged" , "ManipulationCompleted" ), |
|
|
new WinFormsToWpfTranslator("PaddingChanged" , "ManipulationDelta" ), |
|
|
new WinFormsToWpfTranslator("PaddingChanged" , "ManipulationInertiaStarting" ), |
|
|
new WinFormsToWpfTranslator("PaddingChanged" , "ManipulationStarted" ), |
|
|
new WinFormsToWpfTranslator("PaddingChanged" , "ManipulationStarting" ), |
|
|
new WinFormsToWpfTranslator("ParentChanged" , "ManipulationCompleted" ), |
|
|
new WinFormsToWpfTranslator("PreviewKeyDown" , "PreviewKeyDown" ), |
|
|
new WinFormsToWpfTranslator("QueryContinueDrag" , "PreviewQueryContinueDrag" ), |
|
|
new WinFormsToWpfTranslator("QueryContinueDrag" , "QueryContinueDrag" ), |
|
|
new WinFormsToWpfTranslator("Resize" , "SizeChanged" ), |
|
|
new WinFormsToWpfTranslator("SizeChanged" , "SizeChanged" ), |
|
|
new WinFormsToWpfTranslator("TextChanged" , "PreviewTextInput" ), |
|
|
new WinFormsToWpfTranslator("TextChanged" , "SourceUpdated" ), |
|
|
new WinFormsToWpfTranslator("TextChanged" , "TargetUpdated" ), |
|
|
new WinFormsToWpfTranslator("TextChanged" , "TextInput" ), |
|
|
new WinFormsToWpfTranslator("VisibleChanged" , "IsVisibleChanged" ), |
|
|
new WinFormsToWpfTranslator("BackColorChanged" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("BackgroundImageChanged" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("BackgroundImageLayoutChanged", "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("ClientSizeChanged" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("FontChanged" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("ForeColorChanged" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("Invalidated" , "Layout" ), |
|
|
new WinFormsToWpfTranslator("Leave" , "MouseLeave" ), |
|
|
new WinFormsToWpfTranslator("Leave" , "PreviewStylusOutOfRange" ), |
|
|
new WinFormsToWpfTranslator("Leave" , "StylusLeave" ), |
|
|
new WinFormsToWpfTranslator("Leave" , "TouchLeave" ), |
|
|
new WinFormsToWpfTranslator("LocationChanged" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("Paint" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("RightToLeftChanged" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("StyleChanged" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("SystemColorsChanged" , "LayoutUpdated" ), |
|
|
new WinFormsToWpfTranslator("HandleCreated" , "RequestBringIntoView" ), |
|
|
new WinFormsToWpfTranslator("HandleDestroyed" , "Unloaded" ), |
|
|
new WinFormsToWpfTranslator("AutoSizeChanged" , "NotInWpf_AutoSizeChanged" ), |
|
|
new WinFormsToWpfTranslator("CausesValidationChanged" , "NotInWpf_CausesValidationChanged"), |
|
|
new WinFormsToWpfTranslator("ChangeUICues" , "NotInWpf_ChangeUICues" ), |
|
|
new WinFormsToWpfTranslator("HelpRequested" , "NotInWpf_HelpRequested" ), |
|
|
new WinFormsToWpfTranslator("ImeModeChanged" , "NotInWpf_ImeModeChanged" ), |
|
|
new WinFormsToWpfTranslator("QueryAccessibilityHelp" , "NotInWpf_QueryAccessibilityHelp" ), |
|
|
new WinFormsToWpfTranslator("RegionChanged" , "NotInWpf_RegionChanged" ), |
|
|
new WinFormsToWpfTranslator("TabIndexChanged" , "NotInWpf_TabIndexChanged" ), |
|
|
new WinFormsToWpfTranslator("TabStopChanged" , "NotInWpf_TabStopChanged" ), |
|
|
new WinFormsToWpfTranslator("Validated" , "NotInWpf_Validated" ), |
|
|
new WinFormsToWpfTranslator("Validating" , "NotInWpf_Validating" ), |
|
|
new WinFormsToWpfTranslator("ControlAdded" , "NotInWpf_ControlAdded" ), |
|
|
new WinFormsToWpfTranslator("CheckStateChanged" , "Checked" ), |
|
|
new WinFormsToWpfTranslator("CheckStateChanged" , "Unchecked" ), |
|
|
new WinFormsToWpfTranslator("CheckedChanged" , "Checked" ), |
|
|
new WinFormsToWpfTranslator("CheckedChanged" , "Unchecked" ), |
|
|
new WinFormsToWpfTranslator("CHECKSTATECHANGED" , "Checked" ), |
|
|
new WinFormsToWpfTranslator("CHECKSTATECHANGED" , "Unchecked" ), |
|
|
new WinFormsToWpfTranslator("CHECKEDCHANGED" , "Checked" ), |
|
|
new WinFormsToWpfTranslator("CHECKEDCHANGED" , "Unchecked" ), |
|
|
new WinFormsToWpfTranslator("AppearanceChanged" , "NotInWpf_AppearanceChanged" ), |
|
|
new WinFormsToWpfTranslator("MouseDoubleClick" , "MouseDoubleClick" ), |
|
|
}; |
|
|
#endregion |
|
|
|
|
|
|
|
|
|
|
|
private static Lookup<string, string> controlsTranslator |
|
|
{ |
|
|
get { return (Lookup<string, string>)controlsTxList.ToLookup(p => p.winformsName,p => p.wpfName);} |
|
|
} |
|
|
|
|
|
#region ControlsTypeTranslations |
|
|
private static List<WinFormsToWpfTranslator> controlsTxList = new List<WinFormsToWpfTranslator> |
|
|
{ |
|
|
new WinFormsToWpfTranslator("Button" , "Button" ), |
|
|
new WinFormsToWpfTranslator("MonthCalendar" , "Calendar" ), |
|
|
new WinFormsToWpfTranslator("Panel" , "StackPanel" ), |
|
|
new WinFormsToWpfTranslator("CheckBox" , "CheckBox" ), |
|
|
new WinFormsToWpfTranslator("BindingSource" , "CollectionViewSource" ), |
|
|
new WinFormsToWpfTranslator("ComboBox" , "ComboBox" ), |
|
|
new WinFormsToWpfTranslator("ContextMenuStrip" , "ContextMenu" ), |
|
|
new WinFormsToWpfTranslator("DataGridView" , "DataGrid" ), |
|
|
new WinFormsToWpfTranslator("DateTimePicker" , "DatePicker" ), |
|
|
new WinFormsToWpfTranslator("Timer" , "DispatcherTimer" ), |
|
|
new WinFormsToWpfTranslator("PrintPreviewControl" , "DocumentViewer" ), |
|
|
new WinFormsToWpfTranslator("WebBrowser" , "WebBrowser" ), |
|
|
new WinFormsToWpfTranslator("TableLayoutPanel" , "Grid" ), |
|
|
new WinFormsToWpfTranslator("SplitContainer" , "GridSplitter" ), |
|
|
new WinFormsToWpfTranslator("GroupBox" , "GroupBox" ), |
|
|
new WinFormsToWpfTranslator("PictureBox" , "Image" ), |
|
|
new WinFormsToWpfTranslator("Label" , "Label" ), |
|
|
new WinFormsToWpfTranslator("ListBox" , "ListBox" ), |
|
|
new WinFormsToWpfTranslator("CheckedListBox" , "ListBox with composition" ), |
|
|
new WinFormsToWpfTranslator("ListView" , "ListView" ), |
|
|
new WinFormsToWpfTranslator("SoundPlayer" , "MediaPlayer" ), |
|
|
new WinFormsToWpfTranslator("MenuStrip" , "Menu" ), |
|
|
new WinFormsToWpfTranslator("BindingNavigator" , "Winforms__BindingNavigator" ), |
|
|
new WinFormsToWpfTranslator("ColorDialog" , "Winforms__ColorDialog" ), |
|
|
new WinFormsToWpfTranslator("ErrorProvider" , "Winforms__ErrorProvider" ), |
|
|
new WinFormsToWpfTranslator("FolderBrowserDialog" , "Winforms__FolderBrowserDialog" ), |
|
|
new WinFormsToWpfTranslator("FontDialog" , "Winforms__FontDialog" ), |
|
|
new WinFormsToWpfTranslator("HelpProvider" , "ToolTip" ), |
|
|
new WinFormsToWpfTranslator("ImageList" , "Winforms__ImageList" ), |
|
|
new WinFormsToWpfTranslator("LinkLabel" , "Hyperlink" ), |
|
|
new WinFormsToWpfTranslator("MaskedTextBox" , "Winforms__MaskedTextBox" ), |
|
|
new WinFormsToWpfTranslator("NotifyIcon" , "Winforms__NotifyIcon" ), |
|
|
new WinFormsToWpfTranslator("PageSetupDialog" , "Winforms__PageSetupDialog" ), |
|
|
new WinFormsToWpfTranslator("PrintDocument" , "Winforms__PrintDocument" ), |
|
|
new WinFormsToWpfTranslator("PrintPreviewDialog" , "Winforms__PrintPreviewDialog" ), |
|
|
new WinFormsToWpfTranslator("PropertyGrid" , "Winforms__PropertyGrid" ), |
|
|
new WinFormsToWpfTranslator("OpenFileDialog" , "OpenFileDialog" ), |
|
|
new WinFormsToWpfTranslator("PrintDialog" , "PrintDialog" ), |
|
|
new WinFormsToWpfTranslator("ProgressBar" , "ProgressBar" ), |
|
|
new WinFormsToWpfTranslator("RadioButton" , "RadioButton" ), |
|
|
new WinFormsToWpfTranslator("RichTextBox" , "RichTextBox" ), |
|
|
new WinFormsToWpfTranslator("SaveFileDialog" , "SaveFileDialog" ), |
|
|
new WinFormsToWpfTranslator("HScrollBar" , "ScrollBar" ), |
|
|
new WinFormsToWpfTranslator("VScrollBar" , "ScrollBar" ), |
|
|
new WinFormsToWpfTranslator("ScrollableControl" , "ScrollViewer" ), |
|
|
new WinFormsToWpfTranslator("TrackBar" , "Slider" ), |
|
|
new WinFormsToWpfTranslator("StatusStrip" , "StatusBar" ), |
|
|
new WinFormsToWpfTranslator("TabControl" , "TabControl" ), |
|
|
new WinFormsToWpfTranslator("TextBox" , "TextBox" ), |
|
|
new WinFormsToWpfTranslator("DomainUpDown" , "TextBox and two RepeatButton controls"), |
|
|
new WinFormsToWpfTranslator("NumericUpDown" , "TextBox and two RepeatButton controls"), |
|
|
new WinFormsToWpfTranslator("ToolStrip" , "ToolBar" ), |
|
|
new WinFormsToWpfTranslator("ToolStripContainer" , "ToolBar with composition" ), |
|
|
new WinFormsToWpfTranslator("ToolStripDropDown" , "ToolBar with composition" ), |
|
|
new WinFormsToWpfTranslator("ToolStripDropDownMenu" , "ToolBar with composition" ), |
|
|
new WinFormsToWpfTranslator("ToolStripPanel" , "ToolBar with composition" ), |
|
|
new WinFormsToWpfTranslator("ToolTip" , "ToolTip" ), |
|
|
new WinFormsToWpfTranslator("TreeView" , "TreeView" ), |
|
|
new WinFormsToWpfTranslator("UserControl" , "UserControl" ), |
|
|
new WinFormsToWpfTranslator("Form" , "Window" ), |
|
|
new WinFormsToWpfTranslator("FlowLayoutPanel" , "WrapPanel or StackPanel" ) |
|
|
|
|
|
}; |
|
|
#endregion |
|
|
|
|
|
|
|
|
} |
|
|
// ReSharper restore SpecifyACultureInStringConversionExplicitly |
|
|
// |
|
|
} |