Wednesday, October 17, 2012

Silverlight reference XAML from code

Silverlight reference XAML from code

In Silverlight5, how to reference a user control resource - emoticon from a button_click event?

I can access the object fine if I build it up in code behind then do the databinding that way, however using the XAML approach I get some nicer tooling. Example comes from Ch16

private void Button_Click_1(object sender, RoutedEventArgs e)         {             // **HERE how do I reference the XAML emoticon object              //emoticon.Name = "Smiley face2";             //emoticon.Icon = new BitmapImage(new Uri("icons/happy.png", UriKind.RelativeOrAbsolute));         } 

.

<UserControl x:Class="EmoticonExample.MainPage"              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"              xmlns:local="clr-namespace:EmoticonExample"              mc:Ignorable="d"              d:DesignHeight="300"              d:DesignWidth="400">     <UserControl.Resources>         <local:Emoticon x:Key="emoticon"                         Name="SmileyFace"                         Icon="icons/happy.png" />     </UserControl.Resources>      <Grid x:Name="LayoutRoot"           Margin="10"           Background="White"           DataContext="{StaticResource emoticon}">         <Grid.RowDefinitions>             <RowDefinition Height="Auto" />             <RowDefinition Height="Auto" />         </Grid.RowDefinitions>         <Grid.ColumnDefinitions>             <ColumnDefinition />             <ColumnDefinition />         </Grid.ColumnDefinitions>          <TextBlock Text="Name:" />         <TextBlock Text="Image:" Grid.Column="1" />          <TextBox Name="myTextBox" Text="{Binding Name, Mode=TwoWay}" Grid.Row="1" />         <Image Name="myImage" Source="{Binding Icon}" Stretch="None" Grid.Row="1" Grid.Column="1" />          <Button Content="Button" HorizontalAlignment="Left" Margin="10,116,0,-92" Grid.Row="1" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>     </Grid>  </UserControl> 

enter image description here

Answers & Comments...

Answer: 1

Name your user control

<UserControl x:Class="EmoticonExample.MainPage"               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"               xmlns:d="http://schemas.microsoft.com/expression/blend/2008"               xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"               xmlns:local="clr-namespace:EmoticonExample"               mc:Ignorable="d"               x:Name="Example"              d:DesignHeight="300"               d:DesignWidth="400">   </UserControl 

Then reference it in your code behind:

var emoticon = Example.Resources["emoticon"] as Emoticon; // Im not sure of your data type 
by : tsiornhttp://stackoverflow.com/users/223155




No comments:

Post a Comment

Send us your comment related to the topic mentioned on the blog