public class TimeSliderTool : ICommand { private TimeSliderWindow timeSliderUI = new TimeSliderWindow(); //from ESRI EXAMPLE #region ICommand members public void Execute(object parameter) { timeSliderUI = new TimeSliderWindow(); //from ESRI EXAMPLE MapApplication.Current.ShowWindow("Time Slider", timeSliderUI); //from ESRI EXAMPLE //MapApplication.Current.ShowWindow("Time Slider", new TimeSliderWindow(),false,null,null,WindowType.Floating); }
<controls:ChildWindow xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="TimeSlider.AddIns.ConfigurationWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" Width="403" Height="321" Title="Time Slider Configuration"> <Grid x:Name="LayoutRoot" Margin="2"> <Grid.RowDefinitions> <RowDefinition Height="245*" /> <RowDefinition Height="37" /> </Grid.RowDefinitions> <toolkit:BureauBlackTheme Margin="0,0,-9,-10" Grid.RowSpan="2" /> <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,6,0,8" Grid.Row="1" /> <Button x:Name="OKButton" Content="OK" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,6,79,8" Grid.Row="1" /> <StackPanel Height="29" Name="StartPanel" Width="346" Orientation="Horizontal" Margin="18,0,16,170" VerticalAlignment="Bottom"> <sdk:Label Height="25" Name="_startLabel" Width="76" Content="Start Time:" Foreground="White" /> <sdk:DatePicker Height="23" Name="_startDatePicker" Width="120" /> <sdk:Label Height="23" Name="label5" Width="12" Content=" |" /> <toolkit:TimePicker Height="24" Name="_startTimePicker" PopupMinutesInterval="15" Foreground="White" /> </StackPanel> <StackPanel Height="29" Name="EndPanel" Width="346" Orientation="Horizontal" Margin="18,0,16,135" VerticalAlignment="Bottom"> <sdk:Label Height="25" Name="_endLabel" Width="76" Content="End Time:" Foreground="White" /> <sdk:DatePicker Height="23" Name="_endDatePicker" Width="120" /> <sdk:Label Height="23" Name="label6" Width="12" Content=" |" /> <toolkit:TimePicker Height="24" Name="_endTimePicker" PopupMinutesInterval="15" Foreground="White" /> </StackPanel> <StackPanel Height="25" HorizontalAlignment="Left" Margin="18,12,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="346"> <sdk:Label Height="19" Name="label1" Width="116" Content="Time Span" FontSize="14" HorizontalAlignment="Center" FontWeight="SemiBold" Foreground="White" /> </StackPanel> <StackPanel Height="24" HorizontalAlignment="Left" Margin="12,135,0,0" Name="stackPanel2" VerticalAlignment="Top" Width="352"> <sdk:Label Height="30" Name="label2" Width="185" Content="Time Display Intervals" FontSize="14" FontWeight="SemiBold" HorizontalAlignment="Center" Foreground="White" /> </StackPanel> <StackPanel Height="32" HorizontalAlignment="Left" Margin="18,171,0,0" Name="stackPanel3" VerticalAlignment="Top" Width="346" Orientation="Horizontal"> <TextBox Height="24" Name="_numberText" Width="36" Text="1" /> <sdk:Label Height="27" Name="label3" Width="20" Content=" |" DataContext="{Binding}" /> <ComboBox Height="23" Name="_typeSelect" Width="120" VerticalAlignment="Center"> <ComboBoxItem Content="Week" /> <ComboBoxItem Content="Day" /> <ComboBoxItem Content="Hour" /> <ComboBoxItem Content="Minute" /> </ComboBox> </StackPanel> <Border BorderBrush="White" BorderThickness="2" Height="113" HorizontalAlignment="Left" Margin="8,6,0,0" Name="border1" VerticalAlignment="Top" Width="363"> </Border> <Border BorderBrush="White" BorderThickness="2" Height="99" HorizontalAlignment="Left" Margin="8,125,0,0" Name="border2" VerticalAlignment="Top" Width="363"> </Border> </Grid> </controls:ChildWindow>
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using ESRI.ArcGIS.Client.Extensibility; namespace TimeSlider.AddIns { public partial class ConfigurationWindow : ChildWindow { private TimeSliderWindow timeSlider; public ConfigurationWindow(TimeSliderWindow timeSlider) { InitializeComponent(); this.timeSlider = timeSlider; } private void OKButton_Click(object sender, RoutedEventArgs e) { DateTime selectedStartDateTime = DateTime.MinValue; DateTime selectedEndDateTime = DateTime.MaxValue; string number; string type; if (_startDatePicker.SelectedDate != null && _startTimePicker.Value != null) { DateTime selStartDate = _startDatePicker.SelectedDate.Value; DateTime? tempTime = _startTimePicker.Value; DateTime selTime = tempTime.Value; TimeSpan timeOfStartDay = selTime.TimeOfDay; selectedStartDateTime = new DateTime(selStartDate.Year, selStartDate.Month, selStartDate.Day, timeOfStartDay.Hours, timeOfStartDay.Minutes, timeOfStartDay.Seconds); } if (_endDatePicker.SelectedDate != null && _endTimePicker.Value != null) { DateTime selEndDate = _endDatePicker.SelectedDate.Value; DateTime? tempTime = _endTimePicker.Value; DateTime selTime = tempTime.Value; TimeSpan timeOfEndDay = selTime.TimeOfDay; selectedEndDateTime = new DateTime(selEndDate.Year, selEndDate.Month, selEndDate.Day, timeOfEndDay.Hours, timeOfEndDay.Minutes, timeOfEndDay.Seconds); } number = _numberText.Text; type = _typeSelect.SelectionBoxItem.ToString(); if (selectedStartDateTime != DateTime.MinValue && selectedEndDateTime != DateTime.MaxValue) { updateSlider(selectedStartDateTime, selectedEndDateTime, number, type); } } private void CancelButton_Click(object sender, RoutedEventArgs e) { this.Close(); } private void updateSlider(DateTime start, DateTime end, string inputNo, string inputString) { bool check = timeSlider.accessSlider(start, end, inputNo, inputString); if (check) { this.Close(); } } } }
<controls:ChildWindow xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" x:Class="TimeSlider.AddIns.ErrorWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" Width="400" Height="155" Title="Error"> <Grid x:Name="LayoutRoot" Margin="2"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <toolkit:BureauBlackTheme Grid.RowSpan="2" /> <Button x:Name="OKButton" Content="OK" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,0,12,12" Grid.Row="1" /> <StackPanel Height="81" HorizontalAlignment="Left" Name="stackPanel1" VerticalAlignment="Top" Width="378"></StackPanel> <StackPanel Name="stackPanel2" Margin="12,11,209,25" Grid.RowSpan="2"> <Image Height="66" Name="image1" Stretch="Fill" Width="128" Source="http://###/Apps/Test_Air/Images/error.png" /> </StackPanel> <StackPanel Height="71" Name="stackPanel3" Margin="176,6,0,4"> <TextBlock Height="66" Name="_errorText" Text="Error text goes here" Foreground="White" FontSize="14" TextAlignment="Left" TextTrimming="None" TextWrapping="Wrap" Width="190" /> </StackPanel> </Grid> </controls:ChildWindow>
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace TimeSlider.AddIns { public partial class ErrorWindow : ChildWindow { public ErrorWindow(String error) { InitializeComponent(); _errorText.Text = error; } private void OKButton_Click(object sender, RoutedEventArgs e) { this.DialogResult = true; } private void CancelButton_Click(object sender, RoutedEventArgs e) { this.DialogResult = false; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using ESRI.ArcGIS.Client; using ESRI.ArcGIS.Client.Extensibility; namespace TimeSlider.AddIns { public partial class TimeSliderWindow : UserControl { public Layer Layer { get { return MapApplication.Current.SelectedLayer as ESRI.ArcGIS.Client.FeatureLayer; } } public Map Map { get { return MapApplication.Current.Map; } } public int CurrentType { get; set; } public string CurrentNumber { get; set; } public TimeExtent DefaultTimeExtent { get { ESRI.ArcGIS.Client.FeatureLayer layer = Layer as ESRI.ArcGIS.Client.FeatureLayer; return layer.TimeExtent; } } public IEnumerable<DateTime> DefaultIntervals { get { return ESRI.ArcGIS.Client.Toolkit.TimeSlider.CreateTimeStopsByTimeInterval(DefaultTimeExtent, TimeSpan.FromDays(1)); } } public TimeExtent DefaultSliderValue { get { ESRI.ArcGIS.Client.FeatureLayer layer = Layer as ESRI.ArcGIS.Client.FeatureLayer; return new TimeExtent(layer.TimeExtent.Start, layer.TimeExtent.Start.AddDays(1)); } } public DateTime DefaultStart { get { ESRI.ArcGIS.Client.FeatureLayer layer = Layer as ESRI.ArcGIS.Client.FeatureLayer; return layer.TimeExtent.Start; } } public DateTime DefaultEnd { get { ESRI.ArcGIS.Client.FeatureLayer layer = Layer as ESRI.ArcGIS.Client.FeatureLayer; return layer.TimeExtent.End; } } public TimeExtent UpdatedValue { get; set; } public TimeSliderWindow() { InitializeComponent(); _timeSlider.MinimumValue = DefaultStart; _timeSlider.MaximumValue = DefaultEnd; _timeSlider.Intervals = DefaultIntervals; _timeSlider.Value = DefaultSliderValue; CurrentNumber = "1"; CurrentType = 1; } private void Config_Click(object sender, RoutedEventArgs e) { ConfigurationWindow config = new ConfigurationWindow(this); DateTime storeStartDate = new DateTime(_timeSlider.MinimumValue.Year, _timeSlider.MinimumValue.Month, _timeSlider.MinimumValue.Day, _timeSlider.MinimumValue.Hour, _timeSlider.MinimumValue.Minute, _timeSlider.MinimumValue.Second); DateTime storeEndDate = new DateTime(_timeSlider.MaximumValue.Year, _timeSlider.MaximumValue.Month, _timeSlider.MaximumValue.Day, _timeSlider.MaximumValue.Hour, _timeSlider.MaximumValue.Minute, _timeSlider.MaximumValue.Second); config._startDatePicker.SelectedDate = storeStartDate; config._endDatePicker.SelectedDate = storeEndDate; config._startTimePicker.Value = storeStartDate; config._endTimePicker.Value = storeEndDate; config._typeSelect.SelectedIndex = CurrentType; config._numberText.Text = CurrentNumber; config._startDatePicker.DisplayDateStart = DefaultTimeExtent.Start; config._startDatePicker.DisplayDateEnd = DefaultTimeExtent.End; config._endDatePicker.DisplayDateStart = DefaultTimeExtent.Start; config._endDatePicker.DisplayDateEnd = DefaultTimeExtent.End; config.Show(); } private bool checkDateRange(DateTime start, DateTime end) { if (start >= DefaultTimeExtent.Start && start <= DefaultTimeExtent.End && end >= DefaultTimeExtent.Start && end <= DefaultTimeExtent.End) { if (start > end) { new ErrorWindow("End date/time cannot be before the start date/time.").Show(); return false; } } else { new ErrorWindow("Invalid time extent for the current selected layer.").Show(); return false; } return true; } public bool accessSlider(DateTime start, DateTime end, string number, string type) { if (!checkDateRange(start, end)) { return false; } else { TimeExtent extent = new TimeExtent(start, end); IEnumerable<DateTime> intervals = generateIntervals(start, end, number, type, extent); updateSlider(intervals, start, end); return true; } } private IEnumerable<DateTime> generateIntervals(DateTime start, DateTime end, string number, string type, TimeExtent extent) { switch (type) { case "Week": CurrentNumber = number; CurrentType = 0; UpdatedValue = new TimeExtent(start, start.AddDays(Convert.ToInt32(number) * 7)); return ESRI.ArcGIS.Client.Toolkit.TimeSlider.CreateTimeStopsByTimeInterval(extent, TimeSpan.FromDays(Convert.ToInt32(number) * 7)); case "Day": CurrentNumber = number; CurrentType = 1; UpdatedValue = new TimeExtent(start, start.AddDays(Convert.ToInt32(number))); return ESRI.ArcGIS.Client.Toolkit.TimeSlider.CreateTimeStopsByTimeInterval(extent, TimeSpan.FromDays(Convert.ToInt32(number))); case "Hour": CurrentNumber = number; CurrentType = 2; UpdatedValue = new TimeExtent(start, start.AddHours(Convert.ToInt32(number))); return ESRI.ArcGIS.Client.Toolkit.TimeSlider.CreateTimeStopsByTimeInterval(extent, TimeSpan.FromHours(Convert.ToInt32(number))); case "Minute": CurrentNumber = number; CurrentType = 3; UpdatedValue = new TimeExtent(start, start.AddMinutes(Convert.ToInt32(number))); return ESRI.ArcGIS.Client.Toolkit.TimeSlider.CreateTimeStopsByTimeInterval(extent, TimeSpan.FromMinutes(Convert.ToInt32(number))); default: CurrentNumber = "1"; CurrentType = 1; UpdatedValue = DefaultSliderValue; return DefaultIntervals; } } private void updateSlider(IEnumerable<DateTime> intervals, DateTime start, DateTime end) { _timeSlider.MinimumValue = start; _timeSlider.MaximumValue = end; _timeSlider.Intervals = intervals; _timeSlider.Value = UpdatedValue; } private void _timeSlider_ValueChanged(object sender, ESRI.ArcGIS.Client.Toolkit.TimeSlider.ValueChangedEventArgs e) { Map.TimeExtent = new TimeExtent(); Map.TimeExtent.Start = _timeSlider.Value.Start; Map.TimeExtent.End = _timeSlider.Value.End; _currentTime.Content = "Time: FROM " + TimeZoneInfo.ConvertTime(_timeSlider.Value.Start, TimeZoneInfo.Utc).ToString() + " TO " + TimeZoneInfo.ConvertTime(_timeSlider.Value.End, TimeZoneInfo.Utc).ToString(); } } }
using System; using System.ComponentModel.Composition; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using ESRI.ArcGIS.Client.Extensibility; using ESRI.ArcGIS.Client; namespace TimeSlider.AddIns { [Export(typeof(ICommand))] [DisplayName("Time Slider Tool")] public class TimeSliderTool : ICommand { #region ICommand members public void Execute(object parameter) { MapApplication.Current.ShowWindow("Time Slider " + MapApplication.Current.SelectedLayer.DisplayName, new TimeSliderWindow()); } public bool CanExecute(object parameter) { ESRI.ArcGIS.Client.FeatureLayer layer = MapApplication.Current.SelectedLayer as ESRI.ArcGIS.Client.FeatureLayer; if (layer == null) { return true; } else { if (layer.TimeExtent == null) { return true; } else { return true; } } } public event EventHandler CanExecuteChanged; #endregion } }
<UserControl xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:esri="http://schemas.esri.com/arcgis/client/2009" x:Class="TimeSlider.AddIns.TimeSliderWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="84" d:DesignWidth="681"> <Grid x:Name="LayoutRoot" Background="Transparent" Height="80" Width="676"> <Grid.ColumnDefinitions> <ColumnDefinition Width="30*" /> <ColumnDefinition Width="646*" /> </Grid.ColumnDefinitions> <toolkit:BureauBlackTheme Grid.ColumnSpan="2" Margin="7,0,7,20" /> <StackPanel Orientation="Vertical" Grid.ColumnSpan="2"> <StackPanel Orientation="Horizontal" Margin="0,0,0,1" Grid.ColumnSpan="3" HorizontalAlignment="Left" Width="675" Height="60"> <esri:TimeSlider x:Name="_timeSlider" HorizontalAlignment="Left" Margin="15" VerticalAlignment="Top" Width="600" Height="30" TimeMode="TimeExtent" MinimumValue="{Binding Layer.TimeExtent.Start, Mode=OneWay}" MaximumValue="{Binding Layer.TimeExtent.End, Mode=OneWay}" Value="{Binding Map.TimeExtent, Mode=TwoWay}" ValueChanged="_timeSlider_ValueChanged" > </esri:TimeSlider> <Button Width="30" Height="30" FontSize="20" Click="Config_Click"> <StackPanel Orientation="Horizontal" Height="20" Width="20"> <Image Source="http://###/Apps/Test_Air/Images/config_icon.png" /> </StackPanel> </Button> </StackPanel> <StackPanel Height="17" Width="663"> <sdk:Label Name="_currentTime" Height="15" HorizontalAlignment="Center" HorizontalContentAlignment="Center"/> </StackPanel> </StackPanel> </Grid> </UserControl>
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.