I am migrating code from .net 10.2. to 100.9.0. We use overlays to show details when the user hovers on a feature. However I can't find how to set the coordinates of the overlay in 100.9.0 (so it appears by the mouse cursor).
XAML:
<esri:MapView x:Name="CenterlineHistoryMapView" WrapAround="True" MouseMove="CLHistMapView_OnMouseMove">
...
<esri:MapView.Overlays>
<esri:OverlayItemsControl>
<Border x:Name="MapTooltip"
Background="White"
BorderBrush="Black" BorderThickness="2"
Padding="4" Margin="4"
HorizontalAlignment="Left" VerticalAlignment="Top"
Visibility="Collapsed">
<StackPanel x:Name="ToolTipStackPanel">
<TextBlock Text="{Binding Attributes[LINE_DESCRIPTION], StringFormat='Line Description: {0}'}" Foreground="Black" FontWeight="Bold" />
<TextBlock Text="{Binding Attributes[ROUTE_ID], StringFormat='Route Id: {0}'}" Foreground="Black" />
<TextBlock Text="{Binding Attributes[DESIGNATOR], StringFormat='Designator: {0}'}" Foreground="Black" />
</StackPanel>
</Border>
</esri:OverlayItemsControl>
</esri:MapView.Overlays>
</esri:MapView>
Code behind:
// rectangle is derived from mouse event location
// I have migrated some of the code to the 100.9 API, like using IdentifyLayerAsync method
long[] rows = await _centerlineFeatureLayer.HitTestAsync(CenterlineHistoryMapView, rectangle);
if (rows != null && rows.Length > 0)
{
IEnumerable<Feature> features = await _centerlineFeatureLayer.FeatureTable.QueryAsync(rows);
Feature feature = features.FirstOrDefault();
if (feature != null)
{
_hoverOverlay.Graphics.Add(new Graphic(feature.Geometry, _hoverLineSymbol));
MapTooltip.DataContext = feature;
MapTooltip.Visibility = Visibility.Visible;
//Looking for the equivalent of this call in 100.9.0
Esri.ArcGISRuntime.Controls.ViewBase.SetViewOverlayAnchor(MapTooltip,
CenterlineHistoryMapView.ScreenToLocation(screenPoint));
}
else
{
MapTooltip.Visibility = Visibility.Collapsed;
}
}On a side note, is would this be better suited as a popup? I'm not understanding the difference between a popup and an overlay.
Hi,
I don't have a sample readily available. But I think the better approach in Runtime 100.9 would be to use a callout GeoView.ShowCalloutAt Method (MapPoint, CalloutDefinition). This will allow you to setup the callout and then place in a location based on mouse location.
Callout is a good suggestion from Joe - here is some sample code showing how this can be implemented: arcgis-runtime-samples-dotnet/ShowCallout.xaml.cs at dbdc4452dfe816ad695719d947fb15a3d93d0891 · Esri...
Regarding Callouts and Popups:
Callouts are simple UI types that can be added over the map and anchored to a coordinate with a leader/tail. Callouts have a configurable components including title, text, and symbol.
Popups are part of the ArcGIS information model and can be configured for individual layers (or sublayers) in a map via a popup definition. They can also be used with graphics from graphics overlays and pixels from rasters. Popups are intended to display the data of a feature, graphic or pixel (geo elements) in a way that is easier to understand than basic attributes in a row/column format.
Popup sample code: arcgis-runtime-samples-dotnet/ShowPopup.xaml at master · Esri/arcgis-runtime-samples-dotnet · GitHub.
Note the PopupViewer is pulled in from the Toolkit (arcgis-toolkit-dotnet/src/Toolkit/Toolkit/UI/Controls/PopupViewer at main · Esri/arcgis-toolkit-dotn...).
Thanks
Mike