In you custom control you can generate the fields based on the Keys.if add a Dependency Property to the UserControl and do the binding to that ie <local:MyMapTipControl Data="{Binding} />. In the DependencyPropertyChanged event handler, in the grid you have that contains the fields clear its children and its row definitions , and do a simple foreach on the keys/values to generate some new matching textblocks:ie
int i=0;
foreach(var key in Data.Keys)
{
ContainerGrid.Rows.Add(new RowDefinition());
TextBlock tb = new TextBlock() { Text = key };
tb.SetValue(Grid.Column, i++);
ContainerGrid.Children.Add(tb);
TextBlock tb2 = new TextBlock() { Text = value };
tb.SetValue(Grid.Column, i);
tb.SetValue(Grid.Row, 1);
ContainerGrid.Children.Add(tb2);
}