2012-07-10 56 views
1

我正在嘗試向esri地圖添加自定義控件。爲此,我使用Marker符號,現在我必須訪問位於markerymbol的controltemplate中的代碼後面的「eventsRadial1」控件。我怎樣才能做到這一點?如何訪問控件模板中的標記符號

<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> 

回答

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; 

    } 
} 

訣竅是在這裏你不能直接到達您的控制,因爲標記控件不可視。

因此,您必須爲您的控件屬性定義依賴項屬性,以便您可以通過使用符號來綁定它們。

那麼你可以用你的符號如下代碼:

   TextBoxMarkerSymbol mSymbol = new TextBoxMarkerSymbol(width, height); 
       mSymbol.OffsetX = width/2; 
       mSymbol.OffsetY = height/2; 
       mSymbol.ContentText = "test binding"; 

有一個愉快的一天。

相關問題