在Google地球中,单击Globe时,KMLTreeView中所选项目的背景颜色会变暗。在我的基于C#的应用程序中,TreeView节点丢失了所有颜色,因此我不知道选择了哪个项目。
同样,当我点击相关联的地标时,我希望树视图节点突出显示,而GE也是如此。
我认为这是默认行为,所以我不能正确地将地标与kmltreeview相关联。下面是我用于创建节点并将节点添加到globe以及kmltreeview控件的代码。是否有一些我做错了或不能做到能够使用默认行为?
谢谢!
dynamic placemark = KmlHelpers.CreatePlacemark(ge1,
Coord,
d.sSerialNumber,
d.sNickname,
"Device Type: " + d.sName + "<p>" +
"IP Address: " + d.sIPAddress + "<p>" +
"ESN: " + d.sSerialNumber + "<p>" +
"<a href=\"http://localhost/index.html#"
+ d.sSerialNumber + "\">Details</a>");
var styleMap = ge1.createStyleMap("");
// Create normal style for style map.
var normalStyle = ge1.createStyle("");
var normalIcon = ge1.createIcon("");
normalIcon.setHref("http://maps.google.com/mapfiles/kml/shapes/truck.png");
normalStyle.getIconStyle().setIcon(normalIcon);
// Create highlight style for style map.
var highlightStyle = ge1.createStyle("");
var highlightIcon = ge1.createIcon("");
highlightIcon.setHref("http://maps.google.com/mapfiles/kml/shapes/truck.png");
highlightStyle.getIconStyle().setIcon(highlightIcon);
highlightStyle.getIconStyle().setScale(2.0);
styleMap.setNormalStyle(normalStyle);
styleMap.setHighlightStyle(highlightStyle);
// Apply stylemap to a placemark.
placemark.setStyleSelector(styleMap);
kmlTreeView.ParseKmlObject(placemark);
答案 0 :(得分:2)
KmlTreeView继承自标准TreeView control,因此您可以使用HideSelection属性。默认设置为True
,但是......
当此属性设置为false时,TreeView中的所选节点 控件保持以与当前颜色不同的颜色突出显示 TreeView控件失去焦点时的选择颜色。您可以使用 此属性用于保存用户选择的项目时可见 用户单击表单上的不同控件或移动到 不同的窗口。
要在代码中执行此操作,例如:
kmlTreeView.HideSelection = False;
此外,可以在控件的可视化设计器中设置属性,只需选择KmlTreeView,然后查看属性。最后,双击HideSelection
将其设置为False
<强>更新强>
对于问题的第二部分,在单击coorisponding功能时突出显示节点,您需要编写自定义事件处理程序,然后使用KmlTreeView的GetNodeById
方法。像下面这样的东西应该有效。
private void GEWebBrowser1OnPluginReady(object sender, GEEventArgs geEventArgs)
{
this.geWebBrowser1.AddEventListener(geEventArgs.ApiObject.getGlobe(), EventId.MouseDown);
this.geWebBrowser1.KmlEvent += geWebBrowser1_KmlEvent;
}
void geWebBrowser1_KmlEvent(object sender, GEEventArgs e)
{
// the feature that the mousedown event fired on
dynamic feature = e.ApiObject.getTarget();
// If you have other events added you will need some conditional logic here
// to sort out which event has fired. e.g.
// if(e.EventId == EventId.MouseDown)
// if(GEHelpers.IsApiType(feature, ApiType.KmlPlacemark);
// etc..
string id = feature.getId(); // the features id
KmlTreeViewNode node = myKmlTreeView.GetNodeById(id); // find the corresponding node...
if(node == null) { return; } // no corresponding node...
// set the selected node to the feature node.
myKmlTreeView.SelectedNode = node;
// make sure the node is visible in the treeview
if (!node.IsVisible)
{
node.EnsureVisible();
}
}