我正在尝试向esri地图添加自定义控件。为此,我使用Marker符号,现在我必须从后面的代码访问'eventsRadial1'控件,该代码位于markersymbol的controltemplate中。我怎么能这样做?
<esri:MarkerSymbol x:Key="EventsRadialSymbol">
<esri:MarkerSymbol.ControlTemplate>
<ControlTemplate>
<my:EventsRadial HorizontalAlignment="Left" Margin="15,15,0,0"
x:Name="eventsRadial1" VerticalAlignment="Top"/>
</ControlTemplate>
</esri:MarkerSymbol.ControlTemplate>
</esri:MarkerSymbol>
答案 0 :(得分:1)
我不知道你是否已经解决了这个问题,但我一直在努力解决同样的问题,并提出了解决方案。
首先创建自己的自定义标记符号,如下面的代码:
public class TextBoxMarkerSymbol : MarkerSymbol
{
public static readonly DependencyProperty ContentTextProperty = DependencyProperty.Register("ContentText", typeof(string), typeof(TextBoxMarkerSymbol), new PropertyMetadata(OnTextChanged));
//private string contentText;
public string ContentText
{
get { return (string)GetValue(ContentTextProperty); }
set { SetValue(ContentTextProperty, value); }
}
private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
public TextBoxMarkerSymbol(int width, int height)
{
string template = "<ControlTemplate " +
"xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>" +
"<Canvas>";
template += "<TextBox Name='txtText' Text='{Binding Symbol.ContentText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}' Height='" + height + "' Width='" + width + "' />";
template += " </Canvas>" +
"</ControlTemplate>";
System.IO.MemoryStream templateStream = new System.IO.MemoryStream(System.Text.UTF8Encoding.Default.GetBytes(template));
this.ControlTemplate = System.Windows.Markup.XamlReader.Load(templateStream) as ControlTemplate;
}
}
诀窍就在这里,你无法直接触及你的控制,因为标记控件不是直观的。
因此,您必须为控件属性定义依赖项属性,以便可以使用Symbol绑定它们。
然后你可以使用你的符号如下代码:
TextBoxMarkerSymbol mSymbol = new TextBoxMarkerSymbol(width, height);
mSymbol.OffsetX = width / 2;
mSymbol.OffsetY = height / 2;
mSymbol.ContentText = "test binding";
度过愉快的一天。