activeSymbol = new TextSymbol() { Text = "", FontSize = 12, Foreground = new SolidColorBrush(clr), FontFamily = new FontFamily("Arial"), };
_Draw.IsEnabled = false; _Draw.DrawMode = DrawMode.None;
(_activesymbol as TextSymbol).Text = txtText.Text;
<!-- Selectable Tools Window--> <userControls:DraggableWindow IsOpen="False" x:Name="DrawGraphicToolbar" IsDraggable="True" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="450,110,0,15" Effect="{StaticResource dropShadow}" Background="Black" Title="DRAW GRAPHIC TOOLS"> <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto" Height="Auto" > <Border Effect="{StaticResource miniDropShadow}" Style="{StaticResource RibbonElementBorder}" Padding="15" Margin="10"> <!--<Grid Margin="10" Background="White">--> <StackPanel Orientation="Vertical" Margin="3"> <StackPanel x:Name="MyStackPanel" Orientation="Horizontal"> <Button Tag="DrawPoint" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a point"> <Image Source="images/DrawPoint.png" Margin="2" /> </Button> <Button Tag="DrawPolyline" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a polyline"> <Image Source="images/DrawPolyline.png" Margin="2" /> </Button> <Button Tag="DrawPolygon" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a polygon"> <Image Source="images/DrawPolygon.png" Margin="2" /> </Button> <Button Tag="DrawRectangle" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a rectangle"> <Image Source="images/DrawRectangle.png" Margin="2" /> </Button> <Button Tag="DrawFreehand" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a freehand line"> <Image Source="images/DrawFreehand.png" Margin="2" /> </Button> <Button Tag="DrawArrow" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add an arrow"> <Image Source="images/DrawArrow2.png" Margin="2" /> </Button> <Button Tag="DrawTriangle" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a triangle"> <Image Source="images/DrawTriangle2.png" Margin="2" /> </Button> <Button Tag="DrawCircle" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a circle"> <Image Source="images/DrawCircle2.png" Margin="2" /> </Button> <Button Tag="DrawEllipse" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add an ellipse"> <Image Source="images/DrawEllipse2.png" Margin="2" /> </Button> <Button Tag="EnterText" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add text"> <Image Source="images/text.png" Margin="2" /> </Button> <Button Tag="DrawNothing" Margin="5" Click="Tool_Click" Style="{x:Null}" ToolTipService.ToolTip="Unselect Current Tool"> <Image Source="images/dismiss.png" Margin="2" /> </Button> <Button Tag="ClearStopDraw" Margin="5" Click="Tool_Click" Style="{x:Null}" ToolTipService.ToolTip="Clear graphics"> <Image Source="images/StopDraw.png" Margin="2" /> </Button> </StackPanel> <CheckBox x:Name="EnableEditVerticesScaleRotate" Content="Click on geometry to edit" IsChecked="False" Foreground="Black" FontWeight="Bold" Margin="10,5,5,5" /> <TextBox x:Name="txtText" Text="test" /> </StackPanel> <!--</Grid>--> </Border> </Grid> </userControls:DraggableWindow>
private void MyDrawObjectGraphic_DrawComplete(object sender, ESRI.ArcGIS.Client.DrawEventArgs args) { if (_bolText) //if user selected text from drawing options { //MessageBox.Show(txtText.Text); //_activeSymbol = LayoutRoot.Resources["DefaultGraphicMarkerSymbol"] as Symbol; //string test = txtText.Text; //(_activeSymbol as TextSymbol).Text = test; //MessageBox.Show(test); (_activeSymbol as TextSymbol).Text = txtText.Text; txtText.Text = string.Empty; // spText.Visibility = Visibility.Collapsed; } ESRI.ArcGIS.Client.Graphic graphic = new ESRI.ArcGIS.Client.Graphic() { Geometry = args.Geometry, Symbol = _activeSymbol, }; graphicsLayer.Graphics.Add(graphic); graphicsLayer.Refresh(); }
private void Tool_Click(object sender, RoutedEventArgs e) { UnSelectTools(); VisualStateManager.GoToState(sender as Button, "Selected", false); _bolText = false; switch ((sender as Button).Tag as string) { case "DrawPoint": MyDrawObjectGraphic.DrawMode = DrawMode.Point; _activeSymbol = LayoutRoot.Resources["DefaultGraphicMarkerSymbol"] as Symbol; break; case "DrawPolyline": MyDrawObjectGraphic.DrawMode = DrawMode.Polyline; _activeSymbol = LayoutRoot.Resources["DefaultGraphicLineSymbol"] as Symbol; break; case "DrawPolygon": MyDrawObjectGraphic.DrawMode = DrawMode.Polygon; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawRectangle": MyDrawObjectGraphic.DrawMode = DrawMode.Rectangle; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawFreehand": MyDrawObjectGraphic.DrawMode = DrawMode.Freehand; _activeSymbol = LayoutRoot.Resources["DefaultGraphicLineSymbol"] as Symbol; break; case "DrawArrow": MyDrawObjectGraphic.DrawMode = DrawMode.Arrow; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawTriangle": MyDrawObjectGraphic.DrawMode = DrawMode.Triangle; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawCircle": MyDrawObjectGraphic.DrawMode = DrawMode.Circle; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawEllipse": MyDrawObjectGraphic.DrawMode = DrawMode.Ellipse; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "EnterText": MyDrawObjectGraphic.DrawMode = DrawMode.Point; //_activeSymbol = LayoutRoot.Resources["DefaultGraphicMarkerSymbol"] as Symbol; _activeSymbol = new TextSymbol() { Text = "", FontSize = 12, // Foreground = new SolidColorBrush(clr), FontFamily = new FontFamily("Arial"), }; _bolText = true; break; case "DrawNothing": MyDrawObjectGraphic.DrawMode = DrawMode.None; break; default: MyDrawObjectGraphic.DrawMode = DrawMode.None; graphicsLayer.ClearGraphics(); break; } MyDrawObjectGraphic.IsEnabled = (MyDrawObjectGraphic.DrawMode != DrawMode.None); }
Hi Christine,Before you get into the Switch statement in the Tool_Click routine, reset _bolText to false, otherwise, if the user draws some text and then tries to draw a point/line/ploy afterwards _bolText will still be true it will pass your if _bolText test.Hope that helps, Terry
case "EnterText": MyDrawObjectGraphic.DrawMode = DrawMode.Point; _activeSymbol = LayoutRoot.Resources["DefaultGraphicMarkerSymbol"] as Symbol; _bolText = true; break;
private void MyDrawObjectGraphic_DrawComplete(object sender, ESRI.ArcGIS.Client.DrawEventArgs args) { if (_bolText) //if user selected text from drawing options { (_activeSymbol as TextSymbol).Text = txtText.Text; txtText.Text = string.Empty; // spText.Visibility = Visibility.Collapsed; } ESRI.ArcGIS.Client.Graphic graphic = new ESRI.ArcGIS.Client.Graphic() { Geometry = args.Geometry, Symbol = _activeSymbol, }; graphicsLayer.Graphics.Add(graphic); graphicsLayer.Refresh(); }
<StackPanel Orientation="Vertical" Margin="3"> <StackPanel x:Name="MyStackPanel" Orientation="Horizontal"> <Button Tag="DrawPoint" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a point"> <Image Source="images/DrawPoint.png" Margin="2" /> </Button> <Button Tag="DrawPolyline" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a polyline"> <Image Source="images/DrawPolyline.png" Margin="2" /> </Button> <Button Tag="DrawPolygon" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a polygon"> <Image Source="images/DrawPolygon.png" Margin="2" /> </Button> <Button Tag="DrawRectangle" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a rectangle"> <Image Source="images/DrawRectangle.png" Margin="2" /> </Button> <Button Tag="DrawFreehand" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a freehand line"> <Image Source="images/DrawFreehand.png" Margin="2" /> </Button> <Button Tag="DrawArrow" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add an arrow"> <Image Source="images/DrawArrow2.png" Margin="2" /> </Button> <Button Tag="DrawTriangle" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a triangle"> <Image Source="images/DrawTriangle2.png" Margin="2" /> </Button> <Button Tag="DrawCircle" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add a circle"> <Image Source="images/DrawCircle2.png" Margin="2" /> </Button> <Button Tag="DrawEllipse" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add an ellipse"> <Image Source="images/DrawEllipse2.png" Margin="2" /> </Button> <Button Tag="EnterText" Margin="5" Click="Tool_Click" ToolTipService.ToolTip="Add text"> <Image Source="images/text.png" Margin="2" /> </Button> <Button Tag="DrawNothing" Margin="5" Click="Tool_Click" Style="{x:Null}" ToolTipService.ToolTip="Unselect Current Tool"> <Image Source="images/dismiss.png" Margin="2" /> </Button> <Button Tag="ClearStopDraw" Margin="5" Click="Tool_Click" Style="{x:Null}" ToolTipService.ToolTip="Clear graphics"> <Image Source="images/StopDraw.png" Margin="2" /> </Button> </StackPanel> <CheckBox x:Name="EnableEditVerticesScaleRotate" Content="Click on geometry to edit" IsChecked="False" Foreground="Black" FontWeight="Bold" Margin="10,5,5,5" /> <TextBox x:Name="txtText" Text="" /> </StackPanel>
private void MyDrawObjectGraphic_DrawComplete(object sender, ESRI.ArcGIS.Client.DrawEventArgs args) { if (_bolText) //if user selected text from drawing options { (_activeSymbol as TextSymbol).Text = txtText.Text; //FAILING HERE STATING NULL txtText.Text = string.Empty; // spText.Visibility = Visibility.Collapsed; } ESRI.ArcGIS.Client.Graphic graphic = new ESRI.ArcGIS.Client.Graphic() { Geometry = args.Geometry, Symbol = _activeSymbol, }; graphicsLayer.Graphics.Add(graphic); graphicsLayer.Refresh(); } private void GraphicsLayerG_MouseLeftButtonUp(object sender, GraphicMouseButtonEventArgs e) { if (EnableEditVerticesScaleRotate.IsChecked.Value) { MyDrawObjectGraphic.DrawMode = DrawMode.None; UnSelectTools(); Editor editor = LayoutRoot.Resources["MyGraphicEditor"] as Editor; if (e.Graphic != null && !(e.Graphic.Geometry is ESRI.ArcGIS.Client.Geometry.MapPoint)) editor.EditVertices.Execute(e.Graphic); } } private void UnSelectTools() { foreach (UIElement element in MyStackPanel.Children) if (element is Button) VisualStateManager.GoToState((element as Button), "UnSelected", false); } private void Tool_Click(object sender, RoutedEventArgs e) { UnSelectTools(); VisualStateManager.GoToState(sender as Button, "Selected", false); switch ((sender as Button).Tag as string) { case "DrawPoint": MyDrawObjectGraphic.DrawMode = DrawMode.Point; _activeSymbol = LayoutRoot.Resources["DefaultGraphicMarkerSymbol"] as Symbol; break; case "DrawPolyline": MyDrawObjectGraphic.DrawMode = DrawMode.Polyline; _activeSymbol = LayoutRoot.Resources["DefaultGraphicLineSymbol"] as Symbol; break; case "DrawPolygon": MyDrawObjectGraphic.DrawMode = DrawMode.Polygon; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawRectangle": MyDrawObjectGraphic.DrawMode = DrawMode.Rectangle; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawFreehand": MyDrawObjectGraphic.DrawMode = DrawMode.Freehand; _activeSymbol = LayoutRoot.Resources["DefaultGraphicLineSymbol"] as Symbol; break; case "DrawArrow": MyDrawObjectGraphic.DrawMode = DrawMode.Arrow; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawTriangle": MyDrawObjectGraphic.DrawMode = DrawMode.Triangle; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawCircle": MyDrawObjectGraphic.DrawMode = DrawMode.Circle; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "DrawEllipse": MyDrawObjectGraphic.DrawMode = DrawMode.Ellipse; _activeSymbol = LayoutRoot.Resources["DefaultGraphicFillSymbol"] as Symbol; break; case "EnterText": MyDrawObjectGraphic.DrawMode = DrawMode.Point; _activeSymbol = LayoutRoot.Resources["DefaultGraphicMarkerSymbol"] as Symbol; _bolText = true; break; case "DrawNothing": MyDrawObjectGraphic.DrawMode = DrawMode.None; break; default: MyDrawObjectGraphic.DrawMode = DrawMode.None; graphicsLayer.ClearGraphics(); break; } MyDrawObjectGraphic.IsEnabled = (MyDrawObjectGraphic.DrawMode != DrawMode.None); }
What I've done is set the DrawMode to Point and then put the text the user types in a textbox at that point - code snippet below. Might work for other DrawMode geometry types too, just haven't tried it. void Draw_DrawComplete(object sender, DrawEventArgs e) { GraphicsLayer gl = _Map.Layers[_glayer] as GraphicsLayer; if (_bolText) //if user selected text from drawing options { (_symbol as TextSymbol).Text = txtText.Text; txtText.Text = string.Empty; spText.Visibility = Visibility.Collapsed; } Graphic g = new Graphic() { Geometry = e.Geometry, Symbol = _symbol }; gl.Graphics.Add(g); gl.Refresh(); _Draw.IsEnabled = false; _Draw.DrawMode = DrawMode.None; }
void Draw_DrawComplete(object sender, DrawEventArgs e) { GraphicsLayer gl = _Map.Layers[_glayer] as GraphicsLayer; if (_bolText) //if user selected text from drawing options { (_symbol as TextSymbol).Text = txtText.Text; txtText.Text = string.Empty; spText.Visibility = Visibility.Collapsed; } Graphic g = new Graphic() { Geometry = e.Geometry, Symbol = _symbol }; gl.Graphics.Add(g); gl.Refresh(); _Draw.IsEnabled = false; _Draw.DrawMode = DrawMode.None; }
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.