| |
 |
BingRouteCalculatedEventHandler Delegate
Namespace:DevExpress.Xpf.Map
Assembly:DevExpress.Xpf.Map.v17.2.dll
 Syntax
C# |
public delegate void BingRouteCalculatedEventHandler(
object sender,
BingRouteCalculatedEventArgs e
)
|
VB |
Public Delegate Sub BingRouteCalculatedEventHandler(
ByVal sender As Object,
ByVal e As BingRouteCalculatedEventArgs
)
|

Remarks
When creating a BingRouteCalculatedEventHandler delegate, you identify the method that will handle the corresponding event. To associate an event with your event handler, add a delegate instance to this event. The event handler is called whenever the event occurs, unless you remove the delegate. For more information about event handler delegates, see Events and Delegates in MSDN.
 Example
This example demonstrates how to calculate routes to the destination point from major roads. To accomplish this, do the following.
NoteRefer to How to: Get a Bing Maps Key if you run the application and see a window with the following error message: "The specified Bing Maps key is invalid. To create a developer account, refer to http://www.microsoft.com/maps/developers".
Xaml:MainWindow.xaml |
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:CalculateRoutesFromMajorRoads"
xmlns:dxm="http://schemas.devexpress.com/winfx/2008/xaml/map"
x:Class="CalculateRoutesFromMajorRoads.MainWindow"
Title="MainWindow" Height="720" Width="1280" MinWidth="1280" MinHeight="720">
<Window.Resources>
<sys:String x:Key="bingKey">
Your Bing Code Here
</sys:String>
<ObjectDataProvider x:Key="BingTravelModeValues"
ObjectType="{x:Type sys:Enum}" MethodName="GetValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="dxm:BingTravelMode"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="RouteOptimizationValues"
ObjectType="{x:Type sys:Enum}" MethodName="GetValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="dxm:BingRouteOptimization"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<dxm:MapControl x:Name="mapControl1" Grid.Column="0">
<dxm:ImageTilesLayer>
<dxm:ImageTilesLayer.DataProvider>
<dxm:BingMapDataProvider Kind="Road"
BingKey="{Binding Source={StaticResource bingKey}}"/>
</dxm:ImageTilesLayer.DataProvider>
</dxm:ImageTilesLayer>
<dxm:InformationLayer EnableHighlighting="False" EnableSelection="False">
<dxm:InformationLayer.DataProvider>
<dxm:BingRouteDataProvider x:Name="routeProvider"
BingKey="{Binding Source={StaticResource bingKey}}"
RouteCalculated="routeDataProvider_RouteCalculated">
<dxm:BingRouteDataProvider.RouteStrokeStyle>
<dxm:StrokeStyle Thickness="10" DashCap="Round"
StartLineCap="Round" EndLineCap="Round" />
</dxm:BingRouteDataProvider.RouteStrokeStyle>
<dxm:BingRouteDataProvider.RouteOptions>
<dxm:BingRouteOptions
Mode="{Binding ElementName=lbMode, Path=SelectedValue}"
RouteOptimization="{Binding ElementName=lbRouteOptimization, Path=SelectedValue}"/>
</dxm:BingRouteDataProvider.RouteOptions>
</dxm:BingRouteDataProvider>
</dxm:InformationLayer.DataProvider>
</dxm:InformationLayer>
</dxm:MapControl>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="4" Validation.Error="ValidationError">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Margin="4,4,2,2">Latitude:</Label>
<TextBox x:Name="tbLatitude" Grid.Row="0" Grid.Column="1" Margin="2,4,4,2">
<TextBox.Text>
<Binding Path="Latitude" NotifyOnValidationError="True">
<Binding.ValidationRules>
<local:RangeDoubleValidationRule Min="-90" Max="90"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Label Grid.Row="1" Grid.Column="0" Margin="4,2,2,2">Longitude:</Label>
<TextBox x:Name="tbLongitude" Grid.Row="1" Grid.Column="1" Margin="2,2,4,2">
<TextBox.Text>
<Binding Path="Longitude" NotifyOnValidationError="True">
<Binding.ValidationRules>
<local:RangeDoubleValidationRule Min="-180" Max="180"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Label Grid.Row="2" Grid.Column="0" Margin="4,2,2,4">Destination (Optional):</Label>
<TextBox x:Name="tbDestination" Grid.Row="2" Grid.Column="1" Margin="2,2,4,2"/>
</Grid>
<StackPanel Grid.Row="1">
<Label Margin="4,2,4,2">Travel Mode:</Label>
<ListBox x:Name="lbMode" Margin="4,2,4,2" SelectedIndex="0"
ItemsSource="{Binding Source={StaticResource BingTravelModeValues}}"/>
</StackPanel>
<StackPanel Grid.Row="2">
<Label>Route Optimization:</Label>
<ListBox x:Name="lbRouteOptimization" Margin="4,2,4,2" SelectedIndex="0"
ItemsSource="{Binding Source={StaticResource RouteOptimizationValues}}"/>
</StackPanel>
<Button Grid.Row="3" Margin="4,2,4,2" Click="calculateRoutes_Click"
VerticalAlignment="Top" HorizontalAlignment="Right">
Calculate Routes From Major Roads
</Button>
<Border Grid.Row="4" Margin="4,2,4,4" BorderThickness="1"
BorderBrush="{x:Static SystemColors.ActiveBorderBrush}">
<ScrollViewer CanContentScroll="True"
HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible">
<TextBlock x:Name="tbResults" Foreground="Red" TextWrapping="Wrap"/>
</ScrollViewer>
</Border>
</Grid>
</Grid>
</Window>
|
C#:MainWindow.xaml.cs |
using DevExpress.Xpf.Map;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace CalculateRoutesFromMajorRoads {
public partial class MainWindow : Window {
public GeoPoint location = new GeoPoint(40, -120);
public MainWindow() {
InitializeComponent();
this.DataContext = location;
}
#region #RouteCalculated
private void routeDataProvider_RouteCalculated(object sender, BingRouteCalculatedEventArgs e) {
RouteCalculationResult result = e.CalculationResult;
StringBuilder resultList = new StringBuilder();
resultList.Append(String.Format("Status: {0}\n", result.ResultCode));
resultList.Append(String.Format("Fault reason: {0}\n", result.FaultReason));
resultList.Append(ProcessIntermediatePoints(result.IntermediatePoints));
resultList.Append(ProcessRouteResults(result.RouteResults));
tbResults.Text = resultList.ToString();
}
#endregion #RouteCalculated
#region #ProcessStartingPoints
string ProcessIntermediatePoints(List<RouteWaypoint> points) {
if (points == null) return "";
StringBuilder sb = new StringBuilder("Intermediate Points:\n");
sb.Append(String.Format("_________________________\n"));
for (int i = 0; i < points.Count; ++i)
sb.Append(String.Format(
"Intermediate point {0}: {1} ({2})\n",
i+1,
points[i].Description,
points[i].Location
));
return sb.ToString();
}
#endregion #ProcessStartingPoints
#region #ProcessRouteResults
string ProcessRouteResults(List<BingRouteResult> results) {
if (results == null) return "";
StringBuilder sb = new StringBuilder("RouteResults:\n");
for (int i = 0; i < results.Count; i++) {
sb.Append(String.Format("_________________________\n"));
sb.Append(String.Format("Path {0}:\n", i+1));
sb.Append(String.Format("Distance: {0}\n", results[i].Distance));
sb.Append(String.Format("Time: {0}\n", results[i].Time));
sb.Append(ProcessLegs(results[i].Legs));
}
return sb.ToString();
}
#endregion #ProcessRouteResults
#region #ProcessLegs
string ProcessLegs(List<BingRouteLeg> legs) {
if (legs == null) return "";
StringBuilder sb = new StringBuilder("Legs:\n");
for (int i = 0; i < legs.Count; i++) {
sb.Append(String.Format("\tLeg {0}:\n", i+1));
sb.Append(String.Format("\tStart: {0}\n", legs[i].StartPoint));
sb.Append(String.Format("\tEnd: {0}\n", legs[i].EndPoint));
sb.Append(String.Format("\tDistance: {0}\n", legs[i].Distance));
sb.Append(String.Format("\tTime: {0}\n", legs[i].Time));
sb.Append(ProcessItinerary(legs[i].Itinerary));
}
return sb.ToString();
}
#endregion #ProcessLegs
#region #ProcessItinerary
string ProcessItinerary(List<BingItineraryItem> items) {
if (items == null) return "";
StringBuilder sb = new StringBuilder("\tInternary Items:\n");
for (int i = 0; i < items.Count; i++) {
sb.Append(String.Format("\t\tItinerary {0}:\n", i+1));
sb.Append(String.Format("\t\tManeuver: {0}\n", items[i].Maneuver));
sb.Append(String.Format("\t\tLocation: {0}\n", items[i].Location));
sb.Append(String.Format("\t\tInstructions: {0}\n", items[i].ManeuverInstruction));
sb.Append(ProcessWarnings(items[i].Warnings));
}
return sb.ToString();
}
#endregion #ProcessItinerary
#region #ProcessWarnings
string ProcessWarnings(List<BingItineraryItemWarning> warnings) {
if (warnings == null) return "";
StringBuilder sb = new StringBuilder("\t\tWarnings:\n");
for (int i = 0; i < warnings.Count; i++) {
sb.Append(String.Format("\t\t\tWarning {0}:\n", i + 1));
sb.Append(String.Format("\t\t\tType: {0}\n", warnings[i].Type));
sb.Append(String.Format("\t\t\tText: {0}\n", warnings[i].Text));
}
return sb.ToString();
}
#endregion #ProcessWarnings
#region #CalculateRoutesFromMajorRoads
private void calculateRoutes_Click(object sender, RoutedEventArgs e) {
routeProvider.CalculateRoutesFromMajorRoads(new RouteWaypoint(tbDestination.Text, location));
}
#endregion #CalculateRoutesFromMajorRoads
private void ValidationError(object sender, ValidationErrorEventArgs e) {
if (e.Action == ValidationErrorEventAction.Added)
MessageBox.Show(e.Error.ErrorContent.ToString());
}
}
class RangeDoubleValidationRule : ValidationRule {
double min = Double.MinValue;
double max = Double.MaxValue;
public double Min {
get { return min; }
set {
if ((value != min) && (value <=max))
min = value;
}
}
public double Max {
get { return max; }
set {
if ((value != max) && (value >= min))
max = value;
}
}
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) {
double d;
if (!Double.TryParse(value as string, out d))
return new ValidationResult(false, "Input value should be floating point number.");
if ((d < min) || (d > max))
return new ValidationResult(
false,
String.Format(
"Input value should be larger than or equals to {0} and less than or equals to {1}",
min,
max
)
);
return new ValidationResult(true, null);
}
}
}
|
VB:MainWindow.xaml.vb |
Imports DevExpress.Xpf.Map
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Windows
Imports System.Windows.Controls
Namespace CalculateRoutesFromMajorRoads
Partial Public Class MainWindow
Inherits Window
Public location As New GeoPoint(40, -120)
Public Sub New()
InitializeComponent()
Me.DataContext = location
End Sub
#Region "#RouteCalculated"
Private Sub routeDataProvider_RouteCalculated(ByVal sender As Object, ByVal e As BingRouteCalculatedEventArgs)
Dim result As RouteCalculationResult = e.CalculationResult
Dim resultList As New StringBuilder()
resultList.Append(String.Format("Status: {0}" & ControlChars.Lf, result.ResultCode))
resultList.Append(String.Format("Fault reason: {0}" & ControlChars.Lf, result.FaultReason))
resultList.Append(ProcessIntermediatePoints(result.IntermediatePoints))
resultList.Append(ProcessRouteResults(result.RouteResults))
tbResults.Text = resultList.ToString()
End Sub
#EndRegion
#Region "#ProcessStartingPoints"
Private Function ProcessIntermediatePoints(ByVal points As List(Of RouteWaypoint)) As String
If points Is Nothing Then
Return ""
End If
Dim sb As New StringBuilder("Intermediate Points:" & ControlChars.Lf)
sb.Append(String.Format("_________________________" & ControlChars.Lf))
For i As Integer = 0 To points.Count - 1
sb.Append(String.Format("Intermediate point {0}: {1} ({2})" & ControlChars.Lf, i+1, points(i).Description, points(i).Location))
Next i
Return sb.ToString()
End Function
#EndRegion
#Region "#ProcessRouteResults"
Private Function ProcessRouteResults(ByVal results As List(Of BingRouteResult)) As String
If results Is Nothing Then
Return ""
End If
Dim sb As New StringBuilder("RouteResults:" & ControlChars.Lf)
For i As Integer = 0 To results.Count - 1
sb.Append(String.Format("_________________________" & ControlChars.Lf))
sb.Append(String.Format("Path {0}:" & ControlChars.Lf, i+1))
sb.Append(String.Format("Distance: {0}" & ControlChars.Lf, results(i).Distance))
sb.Append(String.Format("Time: {0}" & ControlChars.Lf, results(i).Time))
sb.Append(ProcessLegs(results(i).Legs))
Next i
Return sb.ToString()
End Function
#EndRegion
#Region "#ProcessLegs"
Private Function ProcessLegs(ByVal legs As List(Of BingRouteLeg)) As String
If legs Is Nothing Then
Return ""
End If
Dim sb As New StringBuilder("Legs:" & ControlChars.Lf)
For i As Integer = 0 To legs.Count - 1
sb.Append(String.Format(ControlChars.Tab & "Leg {0}:" & ControlChars.Lf, i+1))
sb.Append(String.Format(ControlChars.Tab & "Start: {0}" & ControlChars.Lf, legs(i).StartPoint))
sb.Append(String.Format(ControlChars.Tab & "End: {0}" & ControlChars.Lf, legs(i).EndPoint))
sb.Append(String.Format(ControlChars.Tab & "Distance: {0}" & ControlChars.Lf, legs(i).Distance))
sb.Append(String.Format(ControlChars.Tab & "Time: {0}" & ControlChars.Lf, legs(i).Time))
sb.Append(ProcessItinerary(legs(i).Itinerary))
Next i
Return sb.ToString()
End Function
#EndRegion
#Region "#ProcessItinerary"
Private Function ProcessItinerary(ByVal items As List(Of BingItineraryItem)) As String
If items Is Nothing Then
Return ""
End If
Dim sb As New StringBuilder(ControlChars.Tab & "Internary Items:" & ControlChars.Lf)
For i As Integer = 0 To items.Count - 1
sb.Append(String.Format(ControlChars.Tab & ControlChars.Tab & "Itinerary {0}:" & ControlChars.Lf, i+1))
sb.Append(String.Format(ControlChars.Tab & ControlChars.Tab & "Maneuver: {0}" & ControlChars.Lf, items(i).Maneuver))
sb.Append(String.Format(ControlChars.Tab & ControlChars.Tab & "Location: {0}" & ControlChars.Lf, items(i).Location))
sb.Append(String.Format(ControlChars.Tab & ControlChars.Tab & "Instructions: {0}" & ControlChars.Lf, items(i).ManeuverInstruction))
sb.Append(ProcessWarnings(items(i).Warnings))
Next i
Return sb.ToString()
End Function
#EndRegion
#Region "#ProcessWarnings"
Private Function ProcessWarnings(ByVal warnings As List(Of BingItineraryItemWarning)) As String
If warnings Is Nothing Then
Return ""
End If
Dim sb As New StringBuilder(ControlChars.Tab & ControlChars.Tab & "Warnings:" & ControlChars.Lf)
For i As Integer = 0 To warnings.Count - 1
sb.Append(String.Format(ControlChars.Tab & ControlChars.Tab & ControlChars.Tab & "Warning {0}:" & ControlChars.Lf, i + 1))
sb.Append(String.Format(ControlChars.Tab & ControlChars.Tab & ControlChars.Tab & "Type: {0}" & ControlChars.Lf, warnings(i).Type))
sb.Append(String.Format(ControlChars.Tab & ControlChars.Tab & ControlChars.Tab & "Text: {0}" & ControlChars.Lf, warnings(i).Text))
Next i
Return sb.ToString()
End Function
#EndRegion
#Region "#CalculateRoutesFromMajorRoads"
Private Sub calculateRoutes_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
routeProvider.CalculateRoutesFromMajorRoads(New RouteWaypoint(tbDestination.Text, location))
End Sub
#EndRegion
Private Sub ValidationError(ByVal sender As Object, ByVal e As ValidationErrorEventArgs)
If e.Action = ValidationErrorEventAction.Added Then
MessageBox.Show(e.Error.ErrorContent.ToString())
End If
End Sub
End Class
Friend Class RangeDoubleValidationRule
Inherits ValidationRule
Private min_Renamed As Double = Double.MinValue
Private max_Renamed As Double = Double.MaxValue
Public Property Min() As Double
Get
Return min_Renamed
End Get
Set(ByVal value As Double)
If (value <> min_Renamed) AndAlso (value <=max_Renamed) Then
min_Renamed = value
End If
End Set
End Property
Public Property Max() As Double
Get
Return max_Renamed
End Get
Set(ByVal value As Double)
If (value <> max_Renamed) AndAlso (value >= min_Renamed) Then
max_Renamed = value
End If
End Set
End Property
Public Overrides Function Validate(ByVal value As Object, ByVal cultureInfo As System.Globalization.CultureInfo) As ValidationResult
Dim d As Double = Nothing
If Not Double.TryParse(TryCast(value, String), d) Then
Return New ValidationResult(False, "Input value should be floating point number.")
End If
If (d < min_Renamed) OrElse (d > max_Renamed) Then
Return New ValidationResult(False, String.Format("Input value should be larger than or equals to {0} and less than or equals to {1}", min_Renamed, max_Renamed))
End If
Return New ValidationResult(True, Nothing)
End Function
End Class
End Namespace
|

See Also
Is this topic helpful?
Additional Feedback
Close
|