我不知道你是否已經解決了這個問題,但我一直在努力解決同樣的問題,並提出瞭解決方案。
首先創建自己的自定義標記符號如下面的代碼:
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;
}
}
訣竅是在這裏你不能直接到達您的控制,因爲標記控件不可視。
因此,您必須爲您的控件屬性定義依賴項屬性,以便您可以通過使用符號來綁定它們。
那麼你可以用你的符號如下代碼:
TextBoxMarkerSymbol mSymbol = new TextBoxMarkerSymbol(width, height);
mSymbol.OffsetX = width/2;
mSymbol.OffsetY = height/2;
mSymbol.ContentText = "test binding";
有一個愉快的一天。