Wednesday, January 9, 2008

How Can I Get System Brushes List in WPF?.

For getting System brushes list, we need to use propertyinfo class.

Here i am creating ObservableCollection with object type as MyBrush.

public class ColorItemList: ObservableCollection
{
public
ColorItemList() : base()
{
Type type = typeof( Brushes );
foreach( PropertyInfo propertyInfo in type.GetProperties( BindingFlags.Public BindingFlags.Static ) )
{
if( propertyInfo.PropertyType == typeof( SolidColorBrush ) )
Add( new MyBrush( propertyInfo.Name, ( SolidColorBrush )propertyInfo.GetValue( null, null ) ) );
}
}
}

MyBrush.CS class should be like this.

public class MyBrush
{
private string m_name;
private SolidColorBrush m_brush;
public string Name
{
get
{
return m_name;
}
set
{ m_name = value;
}
}
public SolidColorBrush Brush
{
get
{
return m_brush;
}
}
public MyBrush(string name, SolidColorBrush brush )
{
m_name = name;
m_brush = brush;
Color color = brush.Color;
}
}

Now you can get System brushes list using our IEnumerable class MyBrushList.

I hope you may got idea. if not Please don't hesitate to post your comments here.

Saturday, January 5, 2008

How Can I Host WPF Controls In WinForms Application

First add references to the WPF namespaces (PresentationCore, PresentationFramework, UIAutomationProvider, UIAutomationTypes, and WindowsBase). Next create an instance of the ElementHost control and the control you wish to embed in the Windows Forms application and then hook that control up to the ElementHost control. Then simply add the ElementHost control to your Forms control collection:


ElementHost host = new ElementHost();
System.Windows.Controls.ListBox wpfListBox =
new System.Windows.Controls.ListBox();

for (int i = 0; i < 10; i++)
{
wpfListBox.Items.Add("Item " + i.ToString());
}

host.Dock = DockStyle.Fill;
host.Controls.Add(wpfListBox);
this.panel1.Controls.Add(host);

However, if you want to use XAML to describe the WPF control that you want to use in the Windows Forms application, you would need to add an Avalon UserControl item to your project. This will create a UserControl1.xaml file and a UserControl1.xaml.cs file. You can then modify the UserControl1.xaml file to contain whatever XAML you wish to describe your control. Then you would simply create an instance of this control and add it to the ElementHost control as in the above example:

ElementHost host = new ElementHost();
UserControl1 uc1 = new UserControl1();
host.Controls.Add(uc1);
host.Dock = DockStyle.Fill;
this.panel1.Controls.Add(host);

In addition, you will need to modify the project file because the Windows Application does not what to do with the XAML file. You will need to open the project file (.csproj, .vbproj, etc.) in an editor like Notepad and then scroll to the bottom.
You will see the following line:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
You will need to copy this line and paste it just below the above line and then change "CSharp" to "WinFX" so that the two lines look like:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFx.targets" />
Now save this file and reload the project using VS and run the application.


Thanks,
Venugopal.