In my application, I actually use a button (not a toggle button) to show the print dialog. Is there a way to get a zoomed map in the print dialog?
I use the 'layerids' to limit the layers displayed in the legend. But I didn't find the similar thing in the legend in the printer style.
private void PrintBtn_Click(object sender, RoutedEventArgs e)
{
if (MapPrinterDialog.Visibility == System.Windows.Visibility.Collapsed)
{
MapPrinterDialog.Visibility = System.Windows.Visibility.Visible;
mapPrinterWithDialog.IsActive = true;
}
else
{
MapPrinterDialog.Visibility = System.Windows.Visibility.Collapsed;
mapPrinterWithDialog.IsActive = false;
}
}
<!--set the print dialog-->
<controls:MapPrinterDialog x:Name="MapPrinterDialog" Background="White" Width="350" Height="400" Style="{StaticResource MyMapPrinterDialogStyle}" Visibility="Collapsed" >
<controls:MapPrinter x:Name="mapPrinterWithDialog" Map="{Binding ElementName=MyMap}" Style="{StaticResource WithLegend}"
Title="DIRT" PageChanged="mapPrinter_PageChanged"
IsScaleFixed="True" Scale="2000000" />
<!--IsActive="{Binding ElementName=PrintBtn }"-->
</controls:MapPrinterDialog>
<controls:MapPrinterIndicator MapPrinter="{Binding ElementName=mapPrinter}" />
IsScaleFixed="True" Scale="2000000"
<!-- Legend -->
<Border Background="{TemplateBinding Background}">
<StackPanel>
<TextBlock Text="Legend" FontWeight="Bold" HorizontalAlignment="Center"/>
<esri:Legend x:Name="PrintLegend" Map="{Binding ElementName=PrintMap}" LayerIDs="Visible Layers,,,">
<esri:Legend.Style>
<Style TargetType="esri:Legend">
<Setter Property="LayerItemsMode" Value="Flat" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="esri:Legend">
<ItemsControl ItemsSource="{TemplateBinding LayerItemsSource}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<!--Layer Item-->
<TextBlock Text="{Binding Label}" FontWeight="SemiBold"/>
<!--Legend Items-->
<ItemsControl ItemsSource="{Binding LegendItems}" >
<ItemsControl.ItemTemplate>
<DataTemplate >
<ContentPresenter Content="{Binding}" ContentTemplate="{Binding Template}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</esri:Legend.Style>
</esri:Legend>
</StackPanel>
</Border>
But with the fixed scale, when I click the button to unfold the MapPrinterDialog, the print extent doesn't change.
This legend is located in the style 'WithLegend'. Then how should I call this legend in the code behind??
Legend printLegend;
//this event used in print legend style to get access to the element in the style
private void PrintLegend_Loaded(object sender, RoutedEventArgs e)
{
printLegend = sender as Legend;
printLegend.LayerIDs.SetValue("MySelectionGraphicsLayer", legendIDcount);
}
<!-- Map-->
<Border BorderBrush="Black" BorderThickness="1">
<esri:Map x:Name="PrintMap" IsLogoVisible="False"
controls:CloneMap.Map="{TemplateBinding Map}"
controls:SurrogateBinder.OverviewMapPrinter="{Binding RelativeSource={RelativeSource TemplatedParent}}">
<controls:PrintOverviewLayer>
<controls:PrintOverviewLayer.ExtentFillSymbol>
<esri:SimpleFillSymbol BorderBrush="Red" BorderThickness="3" Fill="Transparent" />
</controls:PrintOverviewLayer.ExtentFillSymbol>
</controls:PrintOverviewLayer>
</esri:Map>
</Border>
I see there is a big number in the red rectangle on the print dialog and it is the page number. I went through the map part in the template, but didn't find where I can modify to disable this big number....
<controls:PrintOverviewLayer TextSymbol="{x:Null}">
<controls:PrintOverviewLayer.ExtentFillSymbol>
<esri:SimpleFillSymbol BorderBrush="Red" BorderThickness="3" Fill="Transparent" />
</controls:PrintOverviewLayer.ExtentFillSymbol>
</controls:PrintOverviewLayer>
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Row="2" Grid.ColumnSpan="2"
Text="{Binding Scale, RelativeSource={RelativeSource TemplatedParent}, StringFormat='1 : {0:F0} '}" />
Text="{Binding Scale, RelativeSource={RelativeSource TemplatedParent}, StringFormat='1 : {0:F0} '}"