There are occasions when you need to fire controls events programmatically. This article shows you how to fire the click event of a Button control programmatically in Silverlight 2.0.
We have a Silverlight page with two buttons and a text box as you can see in Figure 1. When we mouse move on the Click Me button, we will fire the click event of the button and write some text in the text box. The Clear button simply clears the content of the text box.
Figure 1.
The mouse move over the Click Me button changes the text of the text box as Figure 2.
Figure 2.
Step 1. Create a Silverlight application using Visual Studio 2008.
Note: If you are new to Silverlight and don't know how to create a Silverlight application using Visual Studio 2008, Click here to learn Silverlight.
Step 2. Add two Button and a TextBox controls to the XAML page and add Click and MouseMove event handlers for the first button and Click event handler for the second button. Here is the XAML code for all three controls.
<Button Click="ClickButton_Click" MouseMove="ClickButton_MouseMove"
x:Name="ClickButton" Margin="10,10,10,10" Height="30" Width="100"
Content="Click Me"></Button>
<TextBox x:Name="TextBox1" Height="30" Width="200"></TextBox>
<Button x:Name="ClearButton" Margin="10,10,10,10" Height="30" Width="60"
Content="Clear" Click="ClearButton_Click"></Button>
Step 3. Add support to Automation namespaces to the code behind file by adding namespace references to the following two namespaces.
// Add these two namespaces for the Automation support
using System.Windows.Automation.Peers;
using System.Windows.Automation.Provider;
Step 4. Now add code for the Button click and mouse move event handlers. The final code looks like following. The key code is in ClickButton_MouseMove event handler below that creates a ButtonAutomationPeer object by passing the ClickButton ID and later calls the Invoke method of the InvokeProvider.
/// <summary>
/// ButtonMouseMove event handler for the button. On MouseMove, we will
/// invoke ButtonClick event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ClickButton_MouseMove(object sender, MouseEventArgs e)
{
// Create a ButtonAutomationPeer using the ClickButton
ButtonAutomationPeer buttonAutoPeer = new ButtonAutomationPeer(ClickButton);
// Create an InvokeProvider
IInvokeProvider invokeProvider =
buttonAutoPeer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
// Invoke the default event, which is click for the button
invokeProvider.Invoke();
}
/// <summary>
/// Button click event handler
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ClickButton_Click(object sender, RoutedEventArgs e)
{
TextBox1.Text = "Button Clicked";
}
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
TextBox1.Text = String.Empty;
}