About Me

reno, NV, United States
As of 2011, I have ten years experience in various technologies as C#, WPF, Java, J2EE, C++. For the past three years, I have been extensively working on various .net and java technologies including but not limited to WPF , C# , WCF and composite application guidance (Prism ).

Friday, February 6, 2009

Flying Grids using margin animation









The idea of doing this is to make the application comfortable for left handed and right handed people equally. We came across this problem when we started development of app for touchscreens. The RH people required the command grid on RHS and LH ppl on left handed respectively. There are two grids, One is a command grid (referred as commGrid) and the other is mainGrid. The mainGrid has a button Swap me! When the button is hit, the main grid and commGrid swap. the main window of the app (window1.xaml) has following grid ( superGrid).



















The button_click event handler is as follows...


private void Button_Click(object sender, RoutedEventArgs e)
{
//calculate commGrid and mainGrid widths
double commGridWidth = commGrid.ActualWidth;
double mainGridWidth = mainGrid.ActualWidth;

//animated is a bool const at app level to check if animation is enabled.
if(animated)
AnimateGrids(changeDexter, commGridWidth, mainGridWidth);
else
{
GridChange(commGridWidth, mainGridWidth);
changeDexter(this, EventArgs.Empty);

}


}

The most important function where the central logic lies is AnimateGrids. Since Margin does not have a animation by itself, we can use thickness animation. I have two animations, one for each grid.


private void AnimateGrids(EventHandler postAnimation, double commGridWidth, double mainGridWidth)
{




/*
* If commGrid is right
* commGrid.Margin.Left should move from 0 to -mainGridWidth
* commGrid.Margin.Right should move from 0 to +mainGridWidth
*
* If commGrid is left
* commGrid.Margin.Left should move from 0 to +mainGridWidth
* commGrid.Margin.Right should move from 0 to -mainGridWidth
*
*/



Storyboard sb = new Storyboard();

ThicknessAnimation commGridAnimation
= new ThicknessAnimation
{
From =
new Thickness(0),
To =
new Thickness((isRightHanded ? -1 : 1) * mainGridWidth, 0,
(isRightHanded ? 1 : -1) * mainGridWidth, 0),
AccelerationRatio = 0.2,
FillBehavior = FillBehavior.Stop,
DecelerationRatio = 0.8,
Duration = DURATION
};

ThicknessAnimation mainGridAnimation
= new ThicknessAnimation
{
From =
new Thickness(0),
To =
new Thickness((isRightHanded ? 1 : -1)*commGridWidth, 0,
(isRightHanded ? -1 : 1)*commGridWidth, 0),

FillBehavior = FillBehavior.Stop,
AccelerationRatio = 0.2,
DecelerationRatio = 0.8,
Duration=DURATION

};


Storyboard.SetTarget(commGridAnimation, commGrid);
Storyboard.SetTargetProperty(commGridAnimation,
new PropertyPath(MarginProperty));

Storyboard.SetTarget(mainGridAnimation, mainGrid);
Storyboard.SetTargetProperty(mainGridAnimation,
new PropertyPath(MarginProperty));



sb.Children.Add(commGridAnimation);
sb.Children.Add(mainGridAnimation);

sb.Completed += new EventHandler(postAnimation);

sb.Begin();



}




ChangeDexter is an event handler which is defined as

private void changeDexter(object sender, EventArgs e)
{
isRightHanded = !isRightHanded;
//Swap columns
Grid.SetColumn(mainGrid, isRightHanded ? 0 : 1);
Grid.SetColumn(commGrid, isRightHanded ? 1 : 0);

//Swap widths
GridLength gl = superGrid.ColumnDefinitions.ElementAt(0).Width;
superGrid.ColumnDefinitions.ElementAt(0).Width = superGrid.ColumnDefinitions.ElementAt(1).Width;
superGrid.ColumnDefinitions.ElementAt(1).Width = gl;



}

ChangeDexter is called at the end of animation.



Download source code here


Happy coding!
Pradeep Mahdevu

Friday, December 26, 2008

Test to use code highlighting







In future i want to use syntax highlighter for my code postings on this blog... i hope this works










Wednesday, November 5, 2008

XBAP and Serial Port








XBAP (XAML Browser Application) is a new Windows technology used for creating Rich Internet Applications. While windows applications are normally compiled to an .exe file, browser applications are compiled to an extension .xbap and can be run inside Internet Explorer.

Xbap applications are run within a security sandbox to prevent untrusted applications from controlling local system resources. (e.g deleting local files)

But If your application requires peripherals access, the user can run an xbap in full trust mode. Here is how you can set up a XBAP application in full trust mode.



Here in this application, the main page just has a Button. When clicked, the eventhandler opens the COM3 port and flushes data.

The following code prints a ticket on the COM3 port.

public void button_click(object sender, RoutedEventArgs e)
{
try
{

System.Text.Encoding enc = System.Text.Encoding.ASCII;
System.Console.WriteLine("Hello world");


// Instantiate the communications // port with some basic settings
SerialPort port = new SerialPort("COM3", 115200, Parity.None, 8, StopBits.One);

// Open the port for communications

ReadFromFile("c:\\Cash_Out_Ticket_Test_Stock_424_200_data.txt", port);


}
catch (System.UnauthorizedAccessException)
{
System.Console.WriteLine("Com port occupied. Please choose another port");

}
}


Source code here.

Happy coding!
Pradeep Mahdevu

http://pradeepmahdevu.blogspot.com

XAML Power Toys

The XAML Power toys are a great help to increase your productivity in day to day development. You can download powertoys here.

Here are some videos where you can see the power of this tool.

XAML Power Toys: Create Business Form

This feature provides developers the necessary tool to layout a Grid, with controls and labels. Use this feature if you are creating a Grid that is not bound to a business entity object...

Video

XAML Power Toys: Build Form For Class

This feature puts the WPF & Silverlight form developer on steroids. This video covers selecting a class and creating a fully bound form effortlessly. When combined with well defined...

Video

XAML Power Toys: Installation and Setup

This is a must view video for all first time users of XAML Power Toys. This video covers installing and configuring security in Visual Studio 2008. Author: Karl Shifflett


~Pradeep Mahdevu

http://pradeepmahdevu.blogspot.com



Followers

Blogger Syntax Highliter