Kinjan Bhavsar Kinjan Bhavsar - 3 months ago 25
C# Question

How to get MapControl from ContentPresenter DataTemplate in UWP C#?

I have a ContentPresenter and I have assigned a

DataTemplate
to its
ContentTemplate
attribute. Now I want to add a
MapIcon
in
MapControl
which is child of DataTemplate as shown below:

<DataTemplate x:Key="EWDetailsContentTemplate" x:DataType="viewModels:Task">

<Grid x:Name="ContentPanel"
Background="White"
Margin="0,5,0,0">

<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<Maps:MapControl x:Name="LocationMapControl"
MapServiceToken="key"
Grid.Row="0"
Height="250"/>
//more controls
</Grid>


How can I get MapControl using VisualTree concept of C#?

Answer

How can I get MapControl using VisualTree concept of C#?

You can use VisualTreeHelper to get the MapControl using following codes:

//This function will get all the children Control of one Controls' Container
public List<Control> AllChildren(DependencyObject parent)
{
    var _List = new List<Control>();
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
    {
        var _Child = VisualTreeHelper.GetChild(parent, i);
        if (_Child is Control)
            _List.Add(_Child as Control);
        _List.AddRange(AllChildren(_Child));
    }
    return _List;
}

private MapControl GetMapControl()
{
    var controls = AllChildren(myContentPresenter);//"myContentPresenter" is your ContentPresenter's name.
    var mapControl = (MapControl)controls[0];
    return mapControl;
}