Using WPF inside LINQPad | Syncfusion Blogs
Live Chat Icon For mobile
Live Chat Icon
Popular Categories.NET  (173).NET Core  (29).NET MAUI  (203)Angular  (107)ASP.NET  (51)ASP.NET Core  (82)ASP.NET MVC  (89)Azure  (40)Black Friday Deal  (1)Blazor  (211)BoldSign  (13)DocIO  (24)Essential JS 2  (106)Essential Studio  (200)File Formats  (65)Flutter  (132)JavaScript  (219)Microsoft  (118)PDF  (81)Python  (1)React  (98)Streamlit  (1)Succinctly series  (131)Syncfusion  (897)TypeScript  (33)Uno Platform  (3)UWP  (4)Vue  (45)Webinar  (50)Windows Forms  (61)WinUI  (68)WPF  (157)Xamarin  (161)XlsIO  (35)Other CategoriesBarcode  (5)BI  (29)Bold BI  (8)Bold Reports  (2)Build conference  (8)Business intelligence  (55)Button  (4)C#  (146)Chart  (127)Cloud  (15)Company  (443)Dashboard  (8)Data Science  (3)Data Validation  (8)DataGrid  (63)Development  (618)Doc  (8)DockingManager  (1)eBook  (99)Enterprise  (22)Entity Framework  (5)Essential Tools  (14)Excel  (39)Extensions  (22)File Manager  (6)Gantt  (18)Gauge  (12)Git  (5)Grid  (31)HTML  (13)Installer  (2)Knockout  (2)Language  (1)LINQPad  (1)Linux  (2)M-Commerce  (1)Metro Studio  (11)Mobile  (501)Mobile MVC  (9)OLAP server  (1)Open source  (1)Orubase  (12)Partners  (21)PDF viewer  (42)Performance  (12)PHP  (2)PivotGrid  (4)Predictive Analytics  (6)Report Server  (3)Reporting  (10)Reporting / Back Office  (11)Rich Text Editor  (12)Road Map  (12)Scheduler  (52)Security  (3)SfDataGrid  (9)Silverlight  (21)Sneak Peek  (31)Solution Services  (4)Spreadsheet  (11)SQL  (10)Stock Chart  (1)Surface  (4)Tablets  (5)Theme  (12)Tips and Tricks  (112)UI  (381)Uncategorized  (68)Unix  (2)User interface  (68)Visual State Manager  (2)Visual Studio  (31)Visual Studio Code  (17)Web  (582)What's new  (323)Windows 8  (19)Windows App  (2)Windows Phone  (15)Windows Phone 7  (9)WinRT  (26)

Using WPF inside LINQPad

I love using LINQPad to create and test quick snippets. LINQPad brings some of the instant gratification associated with dynamic languages, such as Python and Ruby, to C#. Until recently, I had not used LINQPad to work with UI code.

A few days ago, I was looking to test a small WPF code snippet. I figured there must be a way to use LINQPad. Several searches later, I had a working snippet that I have been using since. The code is quite simple, and it turned out that LINQPad has great built-in support for WPF through the PanelManager.StackWpfElement and PanelManager.DisplayWpfElement API calls. These calls allow you to create UI elements inside a named panel displayed in the lower pane beside the results window. Additional details are available at https://www.linqpad.net/CustomVisualizers.aspx.

 

Displaying a list box

  
 var items = new ObservableCollection(); 
       // collection initialization      
       var list = new ListBox();          
       string template =     @"<stackpanel>
     <textblock text="{Binding Description}" background="Orange"></textblock>
     <textblock text="{Binding Name}"></textblock>
      </stackpanel>";    
         list.ItemTemplate = template.ToDataTemplate();
         list.ItemsSource = items;
         PanelManager.StackWpfElement(list, "WPF");
 

Note

image

DataTemplate is instantiated using an extension method. The method takes a snippet of XAML, plugs it into a standard XAML snippet for data templates (containing standard namespaces), and then instantiates the XAML using XamlReader.Load. You can, of course, change the XAML format to include other custom assemblies.

 

Code that instantiates Data Template

    public static object InstantiateXAML(string xaml)
    {
            return XamlReader.Load
           (
              XmlReader.Create(new StringReader(xaml))
           );   
      } 

  public static DataTemplate ToDataTemplate(this string template)
  {
      string templateFormat = @"
                               {0}
                              "; 
         return (DataTemplate) InstantiateXAML(string.Format(templateFormat, template));
      }

The snippet provided in the download link below also demonstrates setting content, attaching event handlers, and obtaining access to dynamically created elements.

 

Note

You will have to add the following assembly references and namespace imports in LINQPad. The F4 key will cause the dialog that allows these to be added and displayed. Once added, you can save the assemblies as default.

 

Assemblies

1. PresentationCore.dll

2. PresentationFramework.dll

3. System.Windows.Controls.Ribbon.dll

4. System.Windows.dll

5. System.Windows.Interactivity.dll

6. System.Windows.Presentation.dll

7. System.Xaml.dll

8. WindowsBase.dll

 

Namespaces

1. System.Net

2. System.Net.Mail

3. System

4. System.Collections.Generic

5. System.Linq

6. System.Text

7. System.Collections

8. System.Windows

9. System.Windows.Controls

10. System.Collections.ObjectModel

11. System.Windows.Markup

 

Give it a try. This is the download link: https://www.syncfusion.com/downloads/Support/uploads/general/wpf1270257153.zip

 

 

Tags:

Share this post:

Comments (2)

To make this even easier, you can now just call .Dump() on a WPF control instead of PanelManager.StackWpfElement:

new TextBox().Dump();

Joe

Thanks for your comment Joe.

Best regards,
Daniel

Comments are closed.

Popular Now

Be the first to get updates

Subscribe RSS feed