1、RadTreeVIEw是Telerik公司提供的控件,与之对应的也有SL平台下的控件,使用方法跟Silverlight ToolKit中的TreeVIEw中使用的HIErarchicalDataTemplate类似,可以实现多级递归。
2、添加命名空间引用
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
3、添加资源引用
<UserControl.Resources>
<DataTemplate x:Key="V_Site">
<TextBlock Text="{Binding S_name}" />
</DataTemplate>
<!--ItemTemplate="{StaticResource Team}"添加的是上面的ID-->
<telerik2:HIErarchicalDataTemplate x:Key="V_Region" ItemTemplate="{StaticResource V_Site}"
ItemsSource="{Binding V_Sites}">
<TextBlock Text="{Binding R_name}" />
</telerik2:HIErarchicalDataTemplate>
</UserControl.Resources>
3、控件添加
<telerik:RadTreeVIEw x:name="RadTreeVIEw1"
SelectionMode="Extended" IslineEnabled="True" IsExpandOnSingleClickEnabled="True"
ItemsOptionListType="None" IsOptionElementsEnabled="True"
IsRootlinesEnabled="True" IsTriStateMode="True" Selected="RadTreeVIEw1_Selected" FontSize="14.667" Foreground="#FF0A539D" FontFamily="Microsoft YaHei" Canvas.ZIndex="1"
ItemsSource="{Binding SiteTypesDataSource}"
ItemTemplate="{StaticResource V_Region}" GrID.Row="2" margin="33,6,25,5" />
4、几个类 Item_Collection_distinctBy_VID.cs、V_Site.cs、V_Region.cs,分别如下:
public class Item_Collection_distinctBy_VID : IEqualityComparer<VIDeo>
{
public bool Equals(VIDeo p1,VIDeo p2)
{
if (p1 == null)
return p2 == null;
return p1.REGIONNM == p2.REGIONNM;
}
public int GetHashCode(VIDeo p)
{
if (p == null)
return 0;
return p.REGIONNM.GetHashCode();
}
}
public class V_Site
{
public V_Site(string name,string code,double lgtd,double lttd)
{
this.S_name = name;
this.S_Code = code;
this.S_LGTD = lgtd;
this.S_LTTD = lttd;
}
public string S_Code { get; set; } //站点编码
public string S_name { get; set; } //站点名称
public double S_LGTD { get; set; } //经度
public double S_LTTD { get; set; } //纬度
}
public class V_Region
{
public V_Region(string name,string code)
{
this.R_name = name;
this.R_Code = code;
this.V_Sites = new ObservableCollection<V_Site>();
}
public string R_name { get; set; } //地区名称
public string R_Code { get; set; } //地区编码
public ObservableCollection<V_Site> V_Sites { get; set; } //站点类型
}
5、数据绑定
#region 树状绑定事件,使用liNQ来处理一次性获取的数据,然后绑定到RadTreeVIEw中
public ObservableCollection<V_Region> SiteTypesDataSource { get; set; }
V_Region l;
/// <summary>
/// 根据站点类型和地区类型,获取站点信息
/// </summary>
/// <param name="type"></param>
/// <param name="region"></param>
private voID InitializeDataSource()
{
this.SiteTypesDataSource = new ObservableCollection<V_Region>();
getMapDataSoapClIEnt clIEnt = new getMapDataSoapClIEnt();
clIEnt.getAllSPSitesCompleted += new EventHandler<getAllSPSitesCompletedEventArgs>(clIEnt_getAllSPSitesCompleted);
clIEnt.getAllSPSitesAsync();
}
voID clIEnt_getAllSPSitesCompleted(object sender,getAllSPSitesCompletedEventArgs e)
{
ObservableCollection<VIDeo> Lists = e.Result;
var tempSTTP = Lists.distinct(new Item_Collection_distinctBy_VID()).ToList(); //不同的地区
foreach (VIDeo sttp in tempSTTP)
{
this.SiteTypesDataSource.Add(l = new V_Region(sttp.REGIONNM,sttp.VIDEOID));
List<VIDeo> rets = (from li in Lists
where li.REGIONNM == sttp.REGIONNM
select li
).ToList<VIDeo>();
foreach (VIDeo item in rets)
{
l.V_Sites.Add(new V_Site(item.SITENM,item.VIDEOID,item.LGTD,item.LTTD));
}
}
this.RadTreeVIEw1.ItemsSource = SiteTypesDataSource;
this.RadTreeVIEw1.ExpandAll();
}
#endregion
6、点击TreeVIEw节点,进行站点定位聚焦
//选中时动态绑定
private voID RadTreeVIEw1_Selected(object sender,Telerik.windows.RadRoutedEventArgs e)
{
RadTreeVIEw source = sender as RadTreeVIEw;
try
{
if (source.SelectedItem is MapClIEnt.TreeClass.V_Region)
{
//地区
return;
}
if (source.SelectedItem is V_Site)
{
//站点
V_Site s = source.SelectedItem as V_Site;
Graphic g = new Graphic()
{
Geometry = mercator.FromGeographic(new MapPoint(double.Parse(s.S_LGTD.ToString()),double.Parse(s.S_LTTD.ToString()))),
Symbol = LayoutRoot.Resources["DefaultMarkerSymbol"] as Symbol
};
ESRI.ArcGIS.ClIEnt.Geometry.Envelope selectedFeatureExtent = mercator.ToGeographic(g.Geometry).Extent; //选中点的位置
double expandPercentage = 2;
//加数值后,聚焦(这里需要注意,进行地理坐标和墨卡托坐标的转换 2013-01-29 张大伟)
double wIDthExpand = (selectedFeatureExtent.WIDth + 5) * (expandPercentage / 100);
double heightExpand = (selectedFeatureExtent.Height + 5) * (expandPercentage / 100);
ESRI.ArcGIS.ClIEnt.Geometry.Envelope displayExtent = new Envelope(WKIDConvert.lonlat2mercator(new MapPoint(selectedFeatureExtent.XMin - (wIDthExpand / 2),selectedFeatureExtent.YMin - (heightExpand / 2))),WKIDConvert.lonlat2mercator(new MapPoint(selectedFeatureExtent.XMax + (wIDthExpand / 2),selectedFeatureExtent.YMax + (heightExpand / 2))))
{
SpatialReference = new SpatialReference(102100)
};
try
{
//聚焦
myMap.ZoomTo(displayExtent);
ShowFocus(g);
}
catch (Exception)
{
}
}
}
catch (Exception ex)
{
return;
}
}
7、效果如下图:
@H_916_301@
以上是内存溢出为你收集整理的Silverlight RadTreeView 控件使用介绍全部内容,希望文章能够帮你解决Silverlight RadTreeView 控件使用介绍所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)