Log in to like this post! Creating a Visual Studio LightSwitch Custom Silverlight Control (Using Infragistics Components) [Infragistics] Mihail Mateev / Saturday, September 4, 2010 Using Visual Studio LightSwitch, you have a possibility in the use of Custom Silverlight Controls. With a Custom Silverlight Control, you can implement functionality that is outside the normal abilities of LightSwitch. The first question if some company has an interest in Visual Studio LightSwitch applications is how to now be re-written as a regular Silverlight application because it “can’t perform the new requirements”. To extent a Visual Studio LightSwitch application you may find that in most cases, you just need to create Silverlight Custom Controls, and plug them into LightSwitch. Note: you need Visual Studio Professional (or higher) to create Custom Silverlight Controls. This article demonstrates how to use a ready to use Silverlight Custom Control in Visual Studio LightSwitch. The LightSwitch Sample Project Requirements: Software:• Visual Studio 2010• Visual Studio LightSwitch Beta 1: details.aspx-FamilyID=37551a54-bfd3-4af6-a513-676bbb2dfb69&displaylang=en• Infragistics XamMap component: NetAdvantage for Silverlight Data Visualization 2010 vol.2 http://ko.infragistics.com/dotnet/netadvantage/silverlight/data-visualization.aspx#Downloads Sample data: Free shapefiles for this demo could be downloaded from http://www.cdc.gov/epiinfo/shape.htm Demo application is based on an application, used for the article:"Introduction to Visual Studio LightSwitch” Steps to cerate a sample application: Get a sample from article: "Introduction to Visual Studio LightSwitch” In the LightSwitch application add in IGCustomers table a field, named Country. Add a new project from type Silverlight Class Library named XamMapLibrary Add a new item (Silverlight User Control) to the project, named XamMapControl Implement additional logic in the XamMapControl to highlight a country by name. Add a new Silverlight User Control to the project, named LightSwitchMap. This control will contain code for binding to specific properties from the screen DataContext. Run the application Get a sample from article: "Introduction to Visual Studio LightSwitch” In the LightSwitch application add in IGCustomers table a field, named Country. Add a new project from type Silverlight Class Library named XamMapLibrary Add a new item (Silverlight User Control) to the project, named XamMapControl Copy a code from a sample application for the article "Customizing the XamMap MapNavigationPane Control Template" 1: <UserControl x:Class="XamMapLibrary.XamMapControl" 2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4: xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ig="clr-namespace:Infragistics.Controls.Maps;assembly=InfragisticsSL4.Controls.Maps.XamMap.v10.2" mc:Ignorable="d" 6: d:DesignHeight="300" d:DesignWidth="400"> 7: <UserControl.Resources> 8: <LinearGradientBrush x:Key="PanCtrlBackgroundFill" EndPoint="0.5,1" StartPoint="0.5,0"> 9: <GradientStop Color="#FFffffff" Offset="0"/> 10: <GradientStop Color="#FFf8f9fa" Offset="0.28888899087905884"/> 11: <GradientStop Color="#FFd9dee2" Offset="0.7555559873580933"/> 12: <GradientStop Color="#FFcfd5da" Offset="0.9833329916000366"/> 13: </LinearGradientBrush> 14: <LinearGradientBrush x:Key="NaviBorderFill" EndPoint="0.5,1" StartPoint="0.5,0"> 15: <GradientStop Color="#FFA3AEB9"/> 16: <GradientStop Color="#FF617584" Offset="1"/> 17: </LinearGradientBrush> 18: <LinearGradientBrush x:Key="GenericBackgroundGradient" EndPoint=".7,1" StartPoint=".7,0"> 19: <GradientStop Color="#00000000" Offset="0"/> 20: <GradientStop Color="#06000000" Offset="0.375"/> 21: <GradientStop Color="#1a000000" Offset="0.625"/> 22: <GradientStop Color="#39000000" Offset="1"/> 23: </LinearGradientBrush> 24: <Style x:Key="Arrow" TargetType="Button"> 25: <Setter Property="IsEnabled" Value="true"/> 26: <Setter Property="IsTabStop" Value="true"/> 27: <Setter Property="Background" Value="#FF003255"/> 28: <Setter Property="Foreground" Value="#FF808080"/> 29: <Setter Property="MinWidth" Value="12"/> 30: <Setter Property="MinHeight" Value="8"/> 31: <Setter Property="Margin" Value="0"/> 32: <Setter Property="HorizontalContentAlignment" Value="Center"/> 33: <Setter Property="VerticalContentAlignment" Value="Center"/> 34: <Setter Property="Cursor" Value="Arrow"/> 35: <Setter Property="FontSize" Value="11"/> 36: <Setter Property="Template"> 37: <Setter.Value> 38: <ControlTemplate TargetType="Button"> 39: <Grid x:Name="grid" Background="#00FFFFFF"> 40: <VisualStateManager.VisualStateGroups> 41: <VisualStateGroup x:Name="CommonStates"> 42: <VisualState x:Name="Normal"> 43: <Storyboard/> 44: </VisualState> 45: <VisualState x:Name="MouseOver"> 46: <Storyboard> 47: <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="pathMouseOver"> 48: <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="-3"/> 49: </DoubleAnimationUsingKeyFrames> 50: <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="pathMouseOver"> 51: <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="1"/> 52: </DoubleAnimationUsingKeyFrames> 53: <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="path"> 54: <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="3"/> 55: </DoubleAnimationUsingKeyFrames> 56: </Storyboard> 57: </VisualState> 58: <VisualState x:Name="Pressed"> 59: <Storyboard> 60: <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="pathMouseOver"> 61: <SplineDoubleKeyFrame KeyTime="00:00:00" Value="-3"/> 62: </DoubleAnimationUsingKeyFrames> 63: <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="pathMouseOver"> 64: <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/> 65: </DoubleAnimationUsingKeyFrames> 66: <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="path"> 67: <SplineColorKeyFrame KeyTime="00:00:00" Value="#FF00A8FF"/> 68: </ColorAnimationUsingKeyFrames> 69: <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="pathMouseOver"> 70: <SplineColorKeyFrame KeyTime="00:00:00" Value="#FF00A8FF"/> 71: </ColorAnimationUsingKeyFrames> 72: <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="path"> 73: <SplineDoubleKeyFrame KeyTime="00:00:00" Value="3"/> 74: </DoubleAnimationUsingKeyFrames> 75: </Storyboard> 76: </VisualState> 77: <VisualState x:Name="Disabled"/> 78: </VisualStateGroup> 79: </VisualStateManager.VisualStateGroups> 80: <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="Stretch" Margin="4,5,4,4" Visibility="Collapsed" VerticalAlignment="Stretch" d:IsHidden="True"/> 81: <Path x:Name="path" Data="M 68,30 C68,30 62,36 62,36 62,36 64,38 64,38 64,38 68,34 68,34 68,34 72,38 72,38 72,38 74,36 74,36 74,36 68,30 68,30 z" Fill="{TemplateBinding Foreground}" HorizontalAlignment="Center" Height="8" Opacity="1" RenderTransformOrigin="0.5,0.5" Stretch="Fill" VerticalAlignment="Center" Width="12"> 82: <Path.RenderTransform> 83: <TransformGroup> 84: <ScaleTransform/> 85: <SkewTransform/> 86: <RotateTransform/> 87: <TranslateTransform/> 88: </TransformGroup> 89: </Path.RenderTransform> 90: </Path> 91: <Path x:Name="pathMouseOver" Data="M 68,30 C68,30 62,36 62,36 62,36 64,38 64,38 64,38 68,34 68,34 68,34 72,38 72,38 72,38 74,36 74,36 74,36 68,30 68,30 z" Fill="{TemplateBinding Foreground}" HorizontalAlignment="Stretch" Height="8" Opacity="0" RenderTransformOrigin="0.5,0.5" Stretch="Fill" VerticalAlignment="Stretch" Width="12" d:LayoutOverrides="Height"> 92: <Path.RenderTransform> 93: <TransformGroup> 94: <ScaleTransform/> 95: <SkewTransform/> 96: <RotateTransform/> 97: <TranslateTransform/> 98: </TransformGroup> 99: </Path.RenderTransform> 100: </Path> 101: </Grid> 102: </ControlTemplate> 103: </Setter.Value> 104: </Setter> 105: </Style> 106: <LinearGradientBrush x:Key="FitBtnGlyphForegroundFill" EndPoint="0.7009506225585938,0.8659271240234375" StartPoint="0.4,0.2"> 107: <LinearGradientBrush.GradientStops> 108: <GradientStopCollection> 109: <GradientStop Color="#FF666666" Offset="0"/> 110: <GradientStop Color="#FF8695a4" Offset="1"/> 111: </GradientStopCollection> 112: </LinearGradientBrush.GradientStops> 113: </LinearGradientBrush> 114: <LinearGradientBrush x:Key="FitBtnOuterBevelFill" EndPoint="0.5,1" StartPoint="0.5,0"> 115: <LinearGradientBrush.GradientStops> 116: <GradientStopCollection> 117: <GradientStop Color="#FFa7afb6" Offset="0"/> 118: <GradientStop Color="#FFffffff" Offset="0.5"/> 119: <GradientStop Color="#FFffffff" Offset="1"/> 120: </GradientStopCollection> 121: </LinearGradientBrush.GradientStops> 122: </LinearGradientBrush> 123: <LinearGradientBrush x:Key="FitBtnCenterFill" EndPoint="0.5,1" StartPoint="0.5,0"> 124: <LinearGradientBrush.GradientStops> 125: <GradientStopCollection> 126: <GradientStop Color="#FFf6f7f8" Offset="0"/> 127: <GradientStop Color="#FF8f9da9" Offset="1"/> 128: </GradientStopCollection> 129: </LinearGradientBrush.GradientStops> 130: </LinearGradientBrush> 131: <SolidColorBrush x:Key="FitBtnCenterBorderFill" Color="#FF8594A3"/> 132: <Style x:Key="FitBtn" TargetType="Button"> 133: <Setter Property="IsEnabled" Value="true"/> 134: <Setter Property="IsTabStop" Value="true"/> 135: <Setter Property="Background" Value="#FF003255"/> 136: <Setter Property="Foreground" Value="{StaticResource FitBtnGlyphForegroundFill}"/> 137: <Setter Property="MinWidth" Value="5"/> 138: <Setter Property="MinHeight" Value="5"/> 139: <Setter Property="Margin" Value="0"/> 140: <Setter Property="HorizontalContentAlignment" Value="Center"/> 141: <Setter Property="VerticalContentAlignment" Value="Center"/> 142: <Setter Property="Cursor" Value="Arrow"/> 143: <Setter Property="FontSize" Value="11"/> 144: <Setter Property="Template"> 145: <Setter.Value> 146: <ControlTemplate TargetType="Button"> 147: <Grid> 148: <VisualStateManager.VisualStateGroups> 149: <VisualStateGroup x:Name="CommonStates"> 150: <VisualState x:Name="Normal"/> 151: <VisualState x:Name="MouseOver"> 152: <Storyboard/> 153: </VisualState> 154: <VisualState x:Name="Pressed"> 155: <Storyboard/> 156: </VisualState> 157: <VisualState x:Name="Disabled"> 158: <Storyboard/> 159: </VisualState> 160: </VisualStateGroup> 161: </VisualStateManager.VisualStateGroups> 162: <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Margin="4,5,4,4" Visibility="Collapsed"/> 163: <Ellipse x:Name="OuterBevel" Fill="{StaticResource FitBtnOuterBevelFill}"/> 164: <Ellipse Fill="{StaticResource FitBtnCenterFill}" Margin="1,1,1,1" Stroke="{StaticResource FitBtnCenterBorderFill}"/> 165: <Path x:Name="pathShdw" Data="M2,0 L3,0 L3,2 L5,2 L5,3 L3,3 L3,5 L2,5 L2,3 L0,3 L0,2 L2,2 L2,0 z" Fill="#99FFFFFF" HorizontalAlignment="Stretch" Margin="6,6,4,4" Stretch="Fill" VerticalAlignment="Stretch"/> 166: <Path x:Name="path" Data="M2,0 L3,0 L3,2 L5,2 L5,3 L3,3 L3,5 L2,5 L2,3 L0,3 L0,2 L2,2 L2,0 z" Fill="{TemplateBinding Foreground}" HorizontalAlignment="Stretch" Margin="5,5,5,5" Stretch="Fill" VerticalAlignment="Stretch"/> 167: </Grid> 168: </ControlTemplate> 169: </Setter.Value> 170: </Setter> 171: </Style> 172: <LinearGradientBrush x:Key="BorderFill" EndPoint="0.5,1" StartPoint="0.5,0"> 173: <GradientStop Color="#FFA3AEB9"/> 174: <GradientStop Color="#FF8399A9" Offset="0.375"/> 175: <GradientStop Color="#FF718597" Offset="0.375"/> 176: <GradientStop Color="#FF617584" Offset="1"/> 177: </LinearGradientBrush> 178: <Style x:Key="ZoomOut" TargetType="Button"> 179: <Setter Property="IsEnabled" Value="true"/> 180: <Setter Property="IsTabStop" Value="true"/> 181: <Setter Property="Background" Value="#FF003255"/> 182: <Setter Property="Foreground" Value="{StaticResource BorderFill}"/> 183: <Setter Property="MinWidth" Value="5"/> 184: <Setter Property="MinHeight" Value="5"/> 185: <Setter Property="Margin" Value="0"/> 186: <Setter Property="HorizontalContentAlignment" Value="Center"/> 187: <Setter Property="VerticalContentAlignment" Value="Center"/> 188: <Setter Property="Cursor" Value="Arrow"/> 189: <Setter Property="FontSize" Value="11"/> 190: <Setter Property="Template"> 191: <Setter.Value> 192: <ControlTemplate TargetType="Button"> 193: <Grid Background="#00FFFFFF"> 194: <VisualStateManager.VisualStateGroups> 195: <VisualStateGroup x:Name="CommonStates"> 196: <VisualState x:Name="Normal"> 197: <Storyboard/> 198: </VisualState> 199: <VisualState x:Name="MouseOver"> 200: <Storyboard/> 201: </VisualState> 202: <VisualState x:Name="Pressed"> 203: <Storyboard/> 204: </VisualState> 205: <VisualState x:Name="Disabled"/> 206: </VisualStateGroup> 207: </VisualStateManager.VisualStateGroups> 208: <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="Stretch" Visibility="Collapsed" VerticalAlignment="Stretch"/> 209: <Rectangle x:Name="rectangleShdw" Fill="#FFFFFFFF" HorizontalAlignment="Center" Height="2" VerticalAlignment="Center" Width="10"/> 210: <Rectangle x:Name="rectangle" Fill="{TemplateBinding Foreground}" HorizontalAlignment="Center" Height="2" Margin="0,0,0,2" VerticalAlignment="Center" Width="10"/> 211: </Grid> 212: </ControlTemplate> 213: </Setter.Value> 214: </Setter> 215: </Style> 216: <LinearGradientBrush x:Key="ZoomPaneSliderOuterBevelTopFill" EndPoint="1,1" StartPoint="0,0"> 217: <LinearGradientBrush.GradientStops> 218: <GradientStopCollection> 219: <GradientStop Color="#FFc2cad0" Offset="0"/> 220: <GradientStop Color="#FFFFFFFF" Offset="1"/> 221: <GradientStop Color="#FFDCE0E4" Offset="0.605"/> 222: </GradientStopCollection> 223: </LinearGradientBrush.GradientStops> 224: </LinearGradientBrush> 225: <Style x:Key="ZoomIn" TargetType="Button"> 226: <Setter Property="IsEnabled" Value="true"/> 227: <Setter Property="IsTabStop" Value="true"/> 228: <Setter Property="Background" Value="#FF003255"/> 229: <Setter Property="Foreground" Value="{StaticResource BorderFill}"/> 230: <Setter Property="MinWidth" Value="5"/> 231: <Setter Property="MinHeight" Value="5"/> 232: <Setter Property="Margin" Value="0"/> 233: <Setter Property="HorizontalContentAlignment" Value="Center"/> 234: <Setter Property="VerticalContentAlignment" Value="Center"/> 235: <Setter Property="Cursor" Value="Arrow"/> 236: <Setter Property="FontSize" Value="11"/> 237: <Setter Property="Template"> 238: <Setter.Value> 239: <ControlTemplate TargetType="Button"> 240: <Grid Background="#00FFFFFF"> 241: <VisualStateManager.VisualStateGroups> 242: <VisualStateGroup x:Name="CommonStates"> 243: <VisualState x:Name="Normal"> 244: <Storyboard/> 245: </VisualState> 246: <VisualState x:Name="MouseOver"> 247: <Storyboard/> 248: </VisualState> 249: <VisualState x:Name="Pressed"> 250: <Storyboard/> 251: </VisualState> 252: <VisualState x:Name="Disabled"/> 253: </VisualStateGroup> 254: </VisualStateManager.VisualStateGroups> 255: <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="Stretch" Visibility="Collapsed" VerticalAlignment="Stretch"/> 256: <Path x:Name="pathShdw" Data="M2,0 L3,0 L3,2 L5,2 L5,3 L3,3 L3,5 L2,5 L2,3 L0,3 L0,2 L2,2 L2,0 z" Fill="#FFFFFFFF" HorizontalAlignment="Stretch" Height="10" Margin="0,1,0,0" Stretch="Fill" VerticalAlignment="Stretch" Width="10"/> 257: <Path x:Name="path" Data="M2,0 L3,0 L3,2 L5,2 L5,3 L3,3 L3,5 L2,5 L2,3 L0,3 L0,2 L2,2 L2,0 z" Fill="{TemplateBinding Foreground}" HorizontalAlignment="Stretch" Height="10" Stretch="Fill" VerticalAlignment="Stretch" Width="10"/> 258: </Grid> 259: </ControlTemplate> 260: </Setter.Value> 261: </Setter> 262: </Style> 263: <LinearGradientBrush x:Key="ZoomPaneSliderOuterBevelBottomFill" EndPoint="1,1" StartPoint="0,.5"> 264: <LinearGradientBrush.GradientStops> 265: <GradientStopCollection> 266: <GradientStop Color="#FFD4DADE" Offset="0.2"/> 267: <GradientStop Color="#FFFFFFFF" Offset="0.577"/> 268: <GradientStop Color="#FFD4DADE" Offset="0.95"/> 269: <GradientStop Color="#FFFFFFFF" Offset="0.655"/> 270: </GradientStopCollection> 271: </LinearGradientBrush.GradientStops> 272: </LinearGradientBrush> 273: <LinearGradientBrush x:Key="ZoomPaneSliderBorderFill" EndPoint="0,1" StartPoint="0,0"> 274: <LinearGradientBrush.GradientStops> 275: <GradientStopCollection> 276: <GradientStop Color="#FF8594a3" Offset="0"/> 277: <GradientStop Color="#FFa3aeb9" Offset="1"/> 278: </GradientStopCollection> 279: </LinearGradientBrush.GradientStops> 280: </LinearGradientBrush> 281: <LinearGradientBrush x:Key="ZoomPaneSliderOverlayFill" EndPoint="0.5,1" StartPoint="0.5,0"> 282: <LinearGradientBrush.GradientStops> 283: <GradientStopCollection> 284: <GradientStop Color="#FFffffff" Offset="0"/> 285: <GradientStop Color="#f1ffffff" Offset="0.3700000047683716"/> 286: <GradientStop Color="#e4ffffff" Offset="0.6299999952316284"/> 287: <GradientStop Color="#ccffffff" Offset="1"/> 288: </GradientStopCollection> 289: </LinearGradientBrush.GradientStops> 290: </LinearGradientBrush> 291: <LinearGradientBrush x:Key="SliderTrackBackgroundFill" EndPoint="1,0" StartPoint="0,0"> 292: <LinearGradientBrush.GradientStops> 293: <GradientStopCollection> 294: <GradientStop Color="#FFd3d8dd" Offset="1"/> 295: <GradientStop Color="#FFfafafb" Offset="0"/> 296: </GradientStopCollection> 297: </LinearGradientBrush.GradientStops> 298: </LinearGradientBrush> 299: <SolidColorBrush x:Key="SliderTrackRailBorderFill" Color="#FFA2ACB7"/> 300: <LinearGradientBrush x:Key="SliderTrackRailBackgroundFill" EndPoint="1,0" StartPoint="0,0"> 301: <LinearGradientBrush.GradientStops> 302: <GradientStopCollection> 303: <GradientStop Color="#FFd3d9dd" Offset="0"/> 304: <GradientStop Color="#FFffffff" Offset="0.75"/> 305: <GradientStop Color="#FFffffff" Offset="1"/> 306: </GradientStopCollection> 307: </LinearGradientBrush.GradientStops> 308: </LinearGradientBrush> 309: <LinearGradientBrush x:Key="ZoomRangeThumbCenterFill" EndPoint="0.5,1" StartPoint="0.5,0"> 310: <LinearGradientBrush.GradientStops> 311: <GradientStopCollection> 312: <GradientStop Color="#FFffffff" Offset="0"/> 313: <GradientStop Color="#FFa3aeb9" Offset="1"/> 314: </GradientStopCollection> 315: </LinearGradientBrush.GradientStops> 316: </LinearGradientBrush> 317: <SolidColorBrush x:Key="ZoomRangeThumbBorderFill" Color="#FF8399A9"/> 318: <SolidColorBrush x:Key="ZoomRangeThumbHighlightFill" Color="#FFFFFFFF"/> 319: <ControlTemplate x:Key="ZoomRangeThumb" TargetType="Thumb"> 320: <Grid> 321: <Ellipse Fill="{StaticResource ZoomRangeThumbCenterFill}" Stroke="{StaticResource ZoomRangeThumbBorderFill}"/> 322: <Ellipse HorizontalAlignment="Stretch" Margin="1,1,1,1" Stroke="{StaticResource ZoomRangeThumbHighlightFill}" VerticalAlignment="Stretch"/> 323: </Grid> 324: </ControlTemplate> 325: <Style x:Key="ZoomRange" TargetType="Slider"> 326: <Setter Property="Template"> 327: <Setter.Value> 328: <ControlTemplate TargetType="Slider"> 329: <Grid x:Name="Root"> 330: <Grid.Resources> 331: <ControlTemplate x:Key="RepeatButtonTemplate"> 332: <Grid x:Name="Root" Background="Transparent" Opacity="0"/> 333: </ControlTemplate> 334: </Grid.Resources> 335: <VisualStateManager.VisualStateGroups> 336: <VisualStateGroup x:Name="CommonStates"> 337: <VisualStateGroup.Transitions> 338: <VisualTransition GeneratedDuration="0"/> 339: </VisualStateGroup.Transitions> 340: <VisualState x:Name="Normal"> 341: <Storyboard/> 342: </VisualState> 343: <VisualState x:Name="MouseOver"> 344: <Storyboard/> 345: </VisualState> 346: <VisualState x:Name="Disabled"> 347: <Storyboard> 348: <DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="Root"/> 349: </Storyboard> 350: </VisualState> 351: </VisualStateGroup> 352: <VisualStateGroup x:Name="FocusStates"> 353: <VisualStateGroup.Transitions> 354: <VisualTransition GeneratedDuration="0"/> 355: </VisualStateGroup.Transitions> 356: <VisualState x:Name="Unfocused"> 357: <Storyboard/> 358: </VisualState> 359: <VisualState x:Name="Focused"> 360: <Storyboard> 361: <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisual"/> 362: </Storyboard> 363: </VisualState> 364: </VisualStateGroup> 365: </VisualStateManager.VisualStateGroups> 366: <Grid x:Name="HorizontalTemplate"> 367: <Grid.ColumnDefinitions> 368: <ColumnDefinition Width="Auto"/> 369: <ColumnDefinition Width="Auto"/> 370: <ColumnDefinition Width="*"/> 371: </Grid.ColumnDefinitions> 372: <Rectangle Grid.ColumnSpan="3" Grid.Column="0" Fill="#FFE6EFF7" Height="3" Margin="5,0,5,0" Stroke="Black" StrokeThickness="0.5"/> 373: <RepeatButton x:Name="HorizontalTrackLargeChangeDecreaseRepeatButton" Grid.Column="0" IsTabStop="False" Template="{StaticResource RepeatButtonTemplate}"/> 374: <Thumb x:Name="HorizontalThumb" Grid.Column="1" Height="18" Width="11"/> 375: <RepeatButton x:Name="HorizontalTrackLargeChangeIncreaseRepeatButton" Grid.Column="2" IsTabStop="False" Template="{StaticResource RepeatButtonTemplate}"/> 376: </Grid> 377: <Grid x:Name="VerticalTemplate" Visibility="Collapsed"> 378: <Grid.RowDefinitions> 379: <RowDefinition Height="*"/> 380: <RowDefinition Height="Auto"/> 381: <RowDefinition Height="Auto"/> 382: </Grid.RowDefinitions> 383: <Border BorderBrush="{StaticResource SliderTrackRailBorderFill}" BorderThickness="1,0,0,0" Background="{StaticResource SliderTrackRailBackgroundFill}" CornerRadius="4,4,4,4" Height="Auto" Grid.Row="0" Grid.RowSpan="3" VerticalAlignment="Stretch" Width="8"/> 384: <RepeatButton x:Name="VerticalTrackLargeChangeDecreaseRepeatButton" IsTabStop="False" Grid.RowSpan="3" Template="{StaticResource RepeatButtonTemplate}"/> 385: <Thumb x:Name="VerticalThumb" Height="12" Grid.Row="1" Template="{StaticResource ZoomRangeThumb}" Width="12"/> 386: <RepeatButton x:Name="VerticalTrackLargeChangeIncreaseRepeatButton" IsTabStop="False" Grid.Row="0" Template="{StaticResource RepeatButtonTemplate}"/> 387: </Grid> 388: <Rectangle x:Name="FocusVisual" IsHitTestVisible="false" Opacity="0" StrokeDashCap="Round" Stroke="#666666" StrokeDashArray=".2 5" Visibility="Collapsed"/> 389: </Grid> 390: </ControlTemplate> 391: </Setter.Value> 392: </Setter> 393: <Setter Property="Orientation" Value="Vertical"/> 394: </Style> 395: <SolidColorBrush x:Key="ZoomBtnBorderFill" Color="#FFA3AEB9"/> 396: <LinearGradientBrush x:Key="ZoomBtnCenterFill" EndPoint="1,1" StartPoint="0,0"> 397: <LinearGradientBrush.GradientStops> 398: <GradientStopCollection> 399: <GradientStop Color="#FFfbfcfc" Offset="0"/> 400: <GradientStop Color="#FFc2c9d0" Offset="1"/> 401: </GradientStopCollection> 402: </LinearGradientBrush.GradientStops> 403: </LinearGradientBrush> 404: <ig:SRProvider x:Key="SR"/> 405: <LinearGradientBrush x:Key="PanPaneInnerBorderFill" EndPoint="0.5,1" StartPoint="0.5,0"> 406: <LinearGradientBrush.GradientStops> 407: <GradientStopCollection> 408: <GradientStop Color="#FFffffff" Offset="0"/> 409: <GradientStop Color="#bfffffff" Offset="0.5"/> 410: <GradientStop Color="#00ffffff" Offset="1"/> 411: </GradientStopCollection> 412: </LinearGradientBrush.GradientStops> 413: </LinearGradientBrush> 414: <LinearGradientBrush x:Key="BaseBgDarkInnerBorder" EndPoint="0.5,1" StartPoint="0.5,0"> 415: <LinearGradientBrush.GradientStops> 416: <GradientStopCollection> 417: <GradientStop Color="#FF8594a3" Offset="0"/> 418: <GradientStop Color="#FFc8cfd5" Offset="1"/> 419: </GradientStopCollection> 420: </LinearGradientBrush.GradientStops> 421: </LinearGradientBrush> 422: <LinearGradientBrush x:Key="BaseBgCenterCircleLightBorderFill" EndPoint="0.5,1" StartPoint="0.5,0"> 423: <LinearGradientBrush.GradientStops> 424: <GradientStopCollection> 425: <GradientStop Color="#00ffffff" Offset="0"/> 426: <GradientStop Color="#FFffffff" Offset="0.75"/> 427: <GradientStop Color="#FFffffff" Offset="1"/> 428: </GradientStopCollection> 429: </LinearGradientBrush.GradientStops> 430: </LinearGradientBrush> 431: <LinearGradientBrush x:Key="BaseBgCenterCircleBackgroundFill" EndPoint="0,1" StartPoint="0,0"> 432: <LinearGradientBrush.GradientStops> 433: <GradientStopCollection> 434: <GradientStop Color="#FFc8cfd5" Offset="0"/> 435: <GradientStop Color="#FF5a6978" Offset="1"/> 436: </GradientStopCollection> 437: </LinearGradientBrush.GradientStops> 438: </LinearGradientBrush> 439: <LinearGradientBrush x:Key="BasebgCenterCircleOverlay" EndPoint="0,0.9863013698630136" StartPoint="0,0"> 440: <LinearGradientBrush.GradientStops> 441: <GradientStopCollection> 442: <GradientStop Color="#FFffffff" Offset="0"/> 443: <GradientStop Color="#FFffffff" Offset="0.20000000298023224"/> 444: <GradientStop Color="#f1ffffff" Offset="0.3700000047683716"/> 445: <GradientStop Color="#DAffffff" Offset="0.6299999952316284"/> 446: <GradientStop Color="#ccffffff" Offset="0.800000011920929"/> 447: <GradientStop Color="#8cffffff" Offset="1"/> 448: </GradientStopCollection> 449: </LinearGradientBrush.GradientStops> 450: </LinearGradientBrush> 451: <Style x:Key="MapNavigationPaneCustomStyle" TargetType="ig:MapNavigationPane"> 452: <Setter Property="Background" Value="{StaticResource PanCtrlBackgroundFill}"/> 453: <Setter Property="BorderBrush" Value="{StaticResource NaviBorderFill}"/> 454: <Setter Property="Template"> 455: <Setter.Value> 456: <ControlTemplate TargetType="ig:MapNavigationPane"> 457: <Grid> 458: <Grid x:Name="HorizontalRoot"> 459: <Grid.ColumnDefinitions> 460: <ColumnDefinition Width="auto"/> 461: <ColumnDefinition Width="auto"/> 462: 463: <ColumnDefinition Width="auto"/> 464: <ColumnDefinition Width="auto"/> 465: <ColumnDefinition Width="*"/> 466: </Grid.ColumnDefinitions> 467: <Rectangle Grid.ColumnSpan="5" Grid.Column="0" Fill="White" RadiusY="4" RadiusX="4"/> 468: <Rectangle Grid.ColumnSpan="5" Grid.Column="0" Fill="{StaticResource GenericBackgroundGradient}" RadiusY="4" RadiusX="4" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1.3"/> 469: <Grid x:Name="HorizontalPanControl" Grid.Column="0"> 470: <Grid.ColumnDefinitions> 471: <ColumnDefinition Width="*"/> 472: <ColumnDefinition Width="*"/> 473: <ColumnDefinition Width="*"/> 474: </Grid.ColumnDefinitions> 475: <Grid.RowDefinitions> 476: <RowDefinition Height="*"/> 477: <RowDefinition Height="*"/> 478: <RowDefinition Height="*"/> 479: </Grid.RowDefinitions> 480: <Button x:Name="HorizontalPanWestButton" Content="W" Grid.Column="0" Height="20" Grid.Row="1" RenderTransformOrigin="0.5,0.5" Style="{StaticResource Arrow}" Width="20"> 481: <Button.RenderTransform> 482: <TransformGroup> 483: <ScaleTransform/> 484: <SkewTransform/> 485: <RotateTransform Angle="-90"/> 486: <TranslateTransform/> 487: </TransformGroup> 488: </Button.RenderTransform> 489: </Button> 490: <Button x:Name="HorizontalPanSouthButton" Content="S" Grid.Column="1" Height="20" Grid.Row="2" RenderTransformOrigin="0.5,0.5" Style="{StaticResource Arrow}" Width="20"> 491: <Button.RenderTransform> 492: <TransformGroup> 493: <ScaleTransform ScaleY="-1"/> 494: <SkewTransform/> 495: <RotateTransform/> 496: <TranslateTransform/> 497: </TransformGroup> 498: </Button.RenderTransform> 499: </Button> 500: <Button x:Name="HorizontalPanEastButton" Content="E" Grid.Column="2" Height="20" Grid.Row="1" RenderTransformOrigin="0.5,0.5" Style="{StaticResource Arrow}" Width="20"> 501: <Button.RenderTransform> 502: <TransformGroup> 503: <ScaleTransform/> 504: <SkewTransform/> 505: <RotateTransform Angle="90"/> 506: <TranslateTransform/> 507: </TransformGroup> 508: </Button.RenderTransform> 509: </Button> 510: <Button x:Name="HorizontalPanNorthButton" Content="N" Grid.Column="1" Height="20" Grid.Row="0" Style="{StaticResource Arrow}" Width="20"/> 511: <Button x:Name="HorizontalFitButton" Grid.Column="1" Height="20" Grid.Row="1" Style="{StaticResource FitBtn}" Width="20"/> 512: </Grid> 513: <Button x:Name="HorizontalZoomOutButton" Grid.Column="1" HorizontalAlignment="Center" Height="20" Style="{StaticResource ZoomOut}" VerticalAlignment="Center" Width="20"/> 514: <!--Slider x:Name="HorizontalZoomRange" Grid.Column="4" HorizontalAlignment="Stretch" MinWidth="80" Orientation="Horizontal" VerticalAlignment="Center"/--> 515: <ProgressBar HorizontalAlignment="Left" Grid.Column="5" Visibility="Visible" Margin="0,20,0,20" Foreground="Red" x:Name="HorizontalZoomRange" Width="100" Background="{StaticResource ZoomPaneSliderOuterBevelTopFill}"/> 516: <Button x:Name="HorizontalZoomInButton" Grid.Column="2" HorizontalAlignment="Center" Height="20" Style="{StaticResource ZoomIn}" VerticalAlignment="Center" Width="20"/> 517: <Button x:Name="HorizontalBackButton" Grid.Column="3" Content="Back" Width="40" Margin="0,20,0,20" HorizontalAlignment="Right" d:LayoutOverrides="Width"/> 518: </Grid> 519: <Grid x:Name="VerticalRoot"> 520: <Grid.RowDefinitions> 521: <RowDefinition Height="Auto"/> 522: <RowDefinition Height="*"/> 523: </Grid.RowDefinitions> 524: <Grid x:Name="ZoomControl" Grid.Column="0" Margin="0,-3,0,0" Grid.Row="1" Width="42"> 525: <Grid.RowDefinitions> 526: <RowDefinition Height="32"/> 527: <RowDefinition Height="*"/> 528: <RowDefinition Height="32"/> 529: </Grid.RowDefinitions> 530: <Border x:Name="StrokeAndCenter" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,1,1,1" Background="{TemplateBinding Background}" CornerRadius="0,0,21,21" Margin="0,-7,0,0" Grid.Row="0" Grid.RowSpan="3"/> 531: <Border x:Name="HighlightStroke" BorderBrush="#FFFFFFFF" BorderThickness="1,1,1,1" CornerRadius="0,0,20,20" Margin="1,-5,1,1" Grid.RowSpan="3"/> 532: <Border x:Name="SliderBvlTop" Background="{StaticResource ZoomPaneSliderOuterBevelTopFill}" CornerRadius="14,14,0,0" Margin="6,6,6,0" Grid.RowSpan="1"/> 533: <Border x:Name="SliderBvlMid" CornerRadius="0,0,0,0" Height="Auto" Margin="6,0,6,0" Grid.Row="1" Grid.RowSpan="1"> 534: <Border.Background> 535: <LinearGradientBrush EndPoint="1,0" StartPoint="0,0"> 536: <GradientStop Color="#FFD3D9DE" Offset="0"/> 537: <GradientStop Color="#FFFFFFFF" Offset="1"/> 538: </LinearGradientBrush> 539: </Border.Background> 540: </Border> 541: <Border x:Name="SliderBvlBtm" Background="{StaticResource ZoomPaneSliderOuterBevelBottomFill}" Grid.Column="0" CornerRadius="0,0,14,14" Margin="6,0,6,6" Grid.Row="2" Grid.RowSpan="1"/> 542: <Border x:Name="SliderStroke" Background="{StaticResource ZoomPaneSliderBorderFill}" CornerRadius="13,13,13,13" Margin="8,8,8,8" Grid.RowSpan="3"/> 543: <Border x:Name="SliderOverlay" Background="{StaticResource ZoomPaneSliderOverlayFill}" CornerRadius="12,12,12,12" Margin="9,9,9,9" Grid.RowSpan="3"/> 544: <Rectangle Fill="{StaticResource SliderTrackBackgroundFill}" Margin="10,0,10,0" Grid.Row="1" Grid.RowSpan="1"/> 545: <Slider x:Name="VerticalZoomRange" BorderBrush="#FFFFFFFF" HorizontalAlignment="Center" Margin="0,3,0,3" MinHeight="50" Orientation="Vertical" Grid.Row="1" Style="{StaticResource ZoomRange}" VerticalAlignment="Stretch"/> 546: <Grid x:Name="ZoomIn"> 547: <Border BorderBrush="{StaticResource ZoomBtnBorderFill}" BorderThickness="0,0,0,1" Background="{StaticResource ZoomBtnCenterFill}" CornerRadius="11,11,0,0" Margin="10,10,10,1"/> 548: <Rectangle Fill="#FFFFFFFF" Height="1" Margin="10,0,10,0" VerticalAlignment="Bottom"/> 549: <Button x:Name="VerticalZoomInButton" Content="+" FontWeight="Normal" FontFamily="Arial" HorizontalAlignment="Stretch" Margin="10,10,10,0" Style="{StaticResource ZoomIn}" ToolTipService.ToolTip="{Binding ZoomIn, Source={StaticResource SR}}" VerticalAlignment="Stretch"/> 550: </Grid> 551: <Grid x:Name="ZoomOut" Grid.Row="2"> 552: <Border BorderBrush="{StaticResource ZoomBtnBorderFill}" BorderThickness="0,1,0,0" Background="{StaticResource ZoomBtnCenterFill}" CornerRadius="0,0,11,11" Margin="10,0,10,10"/> 553: <Rectangle Fill="#FFFFFFFF" Height="1" Margin="10,1,10,0" VerticalAlignment="Top"/> 554: <Button x:Name="VerticalZoomOutButton" Content="-" FontWeight="Normal" FontFamily="Arial" HorizontalAlignment="Stretch" Margin="10,0,10,10" RenderTransformOrigin="0.5,0.5" Style="{StaticResource ZoomOut}" ToolTipService.ToolTip="{Binding ZoomOut, Source={StaticResource SR}}" VerticalAlignment="Stretch"/> 555: </Grid> 556: </Grid> 557: <Grid x:Name="PanControl" HorizontalAlignment="Center" Height="Auto" VerticalAlignment="Center" d:LayoutOverrides="Width, Height"> 558: <Grid.ColumnDefinitions> 559: <ColumnDefinition Width="Auto"/> 560: <ColumnDefinition Width="Auto"/> 561: <ColumnDefinition Width="Auto"/> 562: </Grid.ColumnDefinitions> 563: <Grid.RowDefinitions> 564: <RowDefinition Height="Auto"/> 565: <RowDefinition Height="Auto"/> 566: <RowDefinition Height="Auto"/> 567: </Grid.RowDefinitions> 568: <Ellipse x:Name="BaseBg" Grid.ColumnSpan="3" Fill="{TemplateBinding Background}" Margin="0,0,0,0" Grid.RowSpan="3" Stroke="{TemplateBinding BorderBrush}"/> 569: <Ellipse x:Name="BaseInnerBorder" Grid.ColumnSpan="3" Margin="1,1,1,1" Grid.RowSpan="3" Stroke="{StaticResource PanPaneInnerBorderFill}"/> 570: <Ellipse x:Name="CenterCircle" Grid.ColumnSpan="3" Fill="{StaticResource BaseBgDarkInnerBorder}" Margin="10,10,10,10" Grid.RowSpan="3" Stroke="{StaticResource BaseBgCenterCircleLightBorderFill}"/> 571: <Ellipse x:Name="CenterCircleBg" Grid.ColumnSpan="3" Fill="{StaticResource BaseBgCenterCircleBackgroundFill}" Margin="12,12,12,12" Grid.RowSpan="3"/> 572: <Ellipse x:Name="CenterCircleBgOverlay" Grid.ColumnSpan="3" Fill="{StaticResource BasebgCenterCircleOverlay}" Margin="12,12,12,12" Grid.RowSpan="3"/> 573: <Button x:Name="VerticalPanNorthButton" Content="N" Grid.Column="1" HorizontalAlignment="Center" Margin="0,19,0,3" Style="{StaticResource Arrow}" ToolTipService.ToolTip="{Binding PanNorth, Source={StaticResource SR}}" VerticalAlignment="Center"/> 574: <Button x:Name="VerticalPanWestButton" Content="W" HorizontalAlignment="Center" Margin="17,0,3,0" Grid.Row="1" RenderTransformOrigin="0.5,0.5" Style="{StaticResource Arrow}" ToolTipService.ToolTip="{Binding PanWest, Source={StaticResource SR}}" VerticalAlignment="Center"> 575: <Button.RenderTransform> 576: <TransformGroup> 577: <ScaleTransform/> 578: <SkewTransform/> 579: <RotateTransform Angle="-90"/> 580: <TranslateTransform/> 581: </TransformGroup> 582: </Button.RenderTransform> 583: </Button> 584: <Button x:Name="VerticalPanEastButton" Content="E" Grid.Column="2" HorizontalAlignment="Center" Margin="3,0,17,0" Grid.Row="1" RenderTransformOrigin="0.5,0.5" Style="{StaticResource Arrow}" ToolTipService.ToolTip="{Binding PanEast, Source={StaticResource SR}}" VerticalAlignment="Center"> 585: <Button.RenderTransform> 586: <TransformGroup> 587: <ScaleTransform/> 588: <SkewTransform/> 589: <RotateTransform Angle="90"/> 590: <TranslateTransform/> 591: </TransformGroup> 592: </Button.RenderTransform> 593: </Button> 594: <Button x:Name="VerticalPanSouthButton" Content="S" Grid.Column="1" HorizontalAlignment="Center" Margin="0,3,0,19" Grid.Row="2" RenderTransformOrigin="0.5,0.5" Style="{StaticResource Arrow}" ToolTipService.ToolTip="{Binding PanSouth, Source={StaticResource SR}}" VerticalAlignment="Center"> 595: <Button.RenderTransform> 596: <TransformGroup> 597: <ScaleTransform ScaleY="-1"/> 598: <SkewTransform/> 599: <RotateTransform/> 600: <TranslateTransform/> 601: </TransformGroup> 602: </Button.RenderTransform> 603: </Button> 604: <Button x:Name="VerticalFitButton" Content="*" Grid.Column="1" HorizontalAlignment="Stretch" Height="22" Margin="5,8,5,8" Grid.Row="1" Style="{StaticResource FitBtn}" ToolTipService.ToolTip="{Binding FitWindow, Source={StaticResource SR}}" Visibility="Visible" VerticalAlignment="Stretch" Width="22"/> 605: </Grid> 606: </Grid> 607: </Grid> 608: </ControlTemplate> 609: </Setter.Value> 610: </Setter> 611: </Style> 612: </UserControl.Resources> 613: <Grid x:Name="LayoutRoot" Background="White"> 614: <ig:XamMap x:Name="xamMapCtrt" d:LayoutOverrides="Width, Height" > 615: <ig:XamMap.Layers> 616: <ig:MapLayer 617: x:Name="World" Brushes="#4C2C42C0 #4C218B93 #4CDC1C1C #4C3D7835 #4C701B51" 618: FillMode="Choropleth" Imported="World_Imported"> 619: <ig:MapLayer.Reader> 620: <ig:ShapeFileReader Uri="ShapeFiles\Cntry00\Cntry00" 621: DataMapping="Name=CNTRY_NAME; Value=POP_CNTRY; Caption=CNTRY_NAME; ToolTip=CNTRY_NAME" /> 622: </ig:MapLayer.Reader> 623: <ig:MapLayer.ValueScale> 624: <ig:LinearScale IsAutoRange="True"/> 625: </ig:MapLayer.ValueScale> 626: </ig:MapLayer> 627: </ig:XamMap.Layers> 628: <ig:MapNavigationPane x:Name="navPane" Margin="0" 629: HorizontalAlignment="Center" VerticalAlignment="Bottom" Orientation="Horizontal" Style="{StaticResource MapNavigationPaneCustomStyle}"/> 630: </ig:XamMap> 631: </Grid> 632: </UserControl> Create a new DependencyProperty named SelectedItemName and add code to highlight a selected MapElement. 1: #region Properties 2: #region SelectedItemName 3: 4: /// <summary> 5: /// SelectedItemName Dependency Property 6: /// </summary> 7: public static readonly DependencyProperty SelectedItemNameProperty = 8: DependencyProperty.Register("SelectedItemName", typeof(string), typeof(XamMapControl), 9: new PropertyMetadata("", 10: new PropertyChangedCallback(OnSelectedItemNameChanged))); 11: 12: /// <summary> 13: /// Gets or sets the SelectedItemName property. This dependency property 14: /// indicates .... 15: /// </summary> 16: public string SelectedItemName 17: { 18: get { return (string)GetValue(SelectedItemNameProperty); } 19: set { SetValue(SelectedItemNameProperty, value); } 20: } 21: 22: /// <summary> 23: /// Handles changes to the SelectedItemName property. 24: /// </summary> 25: private static void OnSelectedItemNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 26: { 27: XamMapControl target = (XamMapControl)d; 28: string oldSelectedItemName = (string)e.OldValue; 29: string newSelectedItemName = target.SelectedItemName; 30: target.OnSelectedItemNameChanged(oldSelectedItemName, newSelectedItemName); 31: } 32: 33: /// <summary> 34: /// Provides derived classes an opportunity to handle changes to the SelectedItemName property. 35: /// </summary> 36: protected virtual void OnSelectedItemNameChanged(string oldSelectedItemName, string newSelectedItemName) 37: { 38: if (!newSelectedItemName.Equals(oldSelectedItemName)) 39: { 40: RestoreMapLayerSettings(); 41: InitMap(newSelectedItemName); 42: } 43: 44: } 45: 46: #endregion //SelectedItemName 47: #endregion //Properties 48: 49: #region Methods 50: #region InitMap 51: private void InitMap(string newSelectedItemName) 52: { 53: MapLayer world = this.xamMapCtrt.Layers["World"]; 54: 55: foreach (MapElement el in world.Elements) 56: { 57: 58: if (el.Name.Equals(newSelectedItemName)) 59: { 60: el.Fill = new SolidColorBrush(Colors.Red); 61: this.xamMapCtrt.WindowRect = el.WorldRect; 62: } 63: } 64: } 65: #endregion //InitMap 66: 67: #region RestoreMapLayerSettings 68: private void RestoreMapLayerSettings() 69: { 70: MapLayer layer = this.xamMapCtrt.Layers["World"]; 71: layer.DataSource = null; 72: 73: layer.DataMapping = null; 74: 75: layer.Reader.ImportAsync(layer); 76: 77: xamMapCtrt.ZoomIn(); 78: xamMapCtrt.WindowFit(); 79: } 80: #endregion //RestoreMapLayerSettings 81: #endregion //Methods 82: 83: #region EventgHandlers 84: #region World_Imported 85: private void World_Imported(object sender, MapLayerImportEventArgs e) 86: { 87: InitMap(this.SelectedItemName); 88: } 89: #endregion //World_Imported 90: #endregion //EventgHandlers Add a new Silverlight User Control to the project, named LightSwitchMap. This control will contain code for binding to specific properties from the screen DataContext. Edit a LightSwitchMap.xaml file: 1: <UserControl x:Class="XamMapLibrary.LightSwitchMap" 2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4: xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6: xmlns:local="clr-namespace:XamMapLibrary" 7: mc:Ignorable="d" 8: d:DesignHeight="300" d:DesignWidth="400"> 9: 10: <Grid x:Name="LayoutRoot" Background="White"> 11: <local:XamMapControl SelectedItemName="{Binding Screen.IGCustomersCollection.SelectedItem.Country}"/> 12: </Grid> 13: </UserControl> Edit the screen IGCustomersListDetail. From menu select: Add Layout Item –> Custom Control. Add a reference to XamMapLibrary. From XamMapLibrary select LightSwitchMap control. Custom control with a name ScreenContent is added in the IGCustomersListDetail screen.Leave all properties with a default values. Open the default startup folder %Projects Folder%\InfraOrdersCustom\InfraOrders\Bin\Debug\Weband add there a folder ShapeFiles with files, used as a data source from XamMap control Run the application Select from the navigation pane: Customers Detail List Detail list for the customers contains a map with a country of the customer in the detail part of the screen. Select a different customer. In the detail part is displayed the country of the selected customer. Conclusion: Visual Studio LightSwitch custom Silverlight controls proposes a quick way to extend LightSwitch application. It is very easy to use existing Silverlight controls in the LightSwitch custom controls. Source code of the demo application you could download here: