Daniel is currently working on areas such as project subsystem or code completion (aside from fixing bugs). Therefore, work on the WPF designer is stalled. But Daniel put together a list of tasks (hard, medium & easy) that you could be helping us with. So if you are interested in helping, and want to be part of writing an open source WPF designer, please do get in touch with me at christophw at icsharcode.net!
WPF Designer mini tasks
Here are some jobs to do on the WPF Designer broken into small parts.
Apart from this list, there are also big jobs to do: Data Binding support, support using Styles, support defining resources.
Components to be used by multiple designer parts
Create “Choose Class” dialog
The data binding UI will need a dialog that allows choosing a class from the referenced assemblies. This will be implemented in WpfDesigner.AddIn and made available to WpfDesign.Designer through a service. The referenced assemblies should be inspected using ICSharpCode.SharpDevelop.Dom
This will be used by the “Content” property editor and by the data binding UI.
Support ‘Virtual Design Root Element’
This means that instead of displaying the designed component, the designer is able to display another component as if it was the root component. The designer should provide a “Back” button on the design surface to allow the user to go back to the real root component.
This feature is required for designing elements that cannot be designed directly on the main design surface, e.g. Tooltips
Write menu designer
The menu designer might be a dialog box that allows editing the menu in a tree view; or it might be an in-place menu designer like the Windows.Forms designer.
Property editing support
Here I’m listing properties that could need improved editing support.
When implementing property editors, take care that the editor should also work when multiple components with different property values are selected, so you always need a way to represent the ‘ambiguous’ value.
Properties of type Brush (e.g. Control.Background / Control.BorderBrush)
Change ICSharpCode.WpfDesign.Designer.Controls.TypeEditors.BrushEditor to include a little drop down button, the drop down should allow to choose the brush type (SolidColorBrush, etc., we don't need to support all of them at the beginning) and allow the user to edit the brush according to the chosen type.
Properties of type BitmapEffect / BitmapEffectInput (e.g. UIElement.BitmapEffect / UIElement.BitmapEffectInput)
Implement a TypeEditor (similar to BrushEditor) for the types BitmapEffect and BitmapEffectInput. Could be as simple as a combo box with the most commonly used effects.
Properties of type ICommand (e.g. ButtonBase.Command)
There should be a way to choose the command to use from some kind of list.
The “C” button should be made a drop down button (like the one used for the Brush editor), it should present “null”, “string”, and menu items for creating commonly used child configurations (e.g. StackPanel with Image and Text when the parent is a button), and “choose class” to create arbitrary objects. This depends on “Create Choose Class Dialog”.
Properties of type ContextMenu (e.g. FrameworkElement.ContextMenu)
Provide a way to create and edit a context menu inside the designer.
Properties of type InputScope
Research what an InputScope is and if/how we should allow the user to edit it.
Properties of type Transform
Similar to the BrushEditor, provide a drop down to choose from the different available transforms and allow editing the transform properties.
Priority: Medium (setting string tool tips), Low (designing complex tool tips)
Should be editable similar to ContentControl.Content, but has to allow the user to design complex tooltips. Depends on “Support ‘Virtual Design Root Element’”
Properties of type FontStretch / FontStyle / FontWeight
Provide a drop down with the available settings
Properties of type FontFamily
Use a dialog to allow the user to choose the font to use.
Properties of type Nullable<bool> (e.g. ToggleButton.IsChecked)
There are two main usage scenarios: this property is specified using data binding (this doesn’t need to be handled by the type editor), or there are some hard coded values.
Write a type editor to support entering string values.
Label.Target is set to the control described by the label (the control getting focus when Alt+Access Key is pressed). This is done using data binding, but choosing the target from the data binding dialog is too tedious – drag’n’drop of a crosshair on the target control would be much easier. Depends on data binding support.
Properties of type ImageSource (e.g. Image.Source)
Allow choosing a “Resource” element already part of the project, or choose a file and it will get added to the project. This TypeEditor would be implemented in WpfDesign.AddIn and not WpfDesign.Designer because it needs access to the project in SharpDevelop
Properties of type ViewBase (e.g. ListView.View)
Provide a drop down with the most commonly used views.