Silverlight Запуск жизненного цикла и связывания - PullRequest
0 голосов
/ 07 ноября 2011

Я впервые использую Silverlight, и поэтому я новичок во всем стиле разметки xaml.Я создаю ГИС-приложение, используя библиотеку silverlight, предоставленную ESRI.

Насколько я понимаю, когда страница XAML анализируется сверху вниз, объекты создаются в порядке.Это правильно?У меня есть объект esri Map, созданный в строке 38 моей главной страницы, а затем в строке 247 моей главной страницы я создаю DrawControl (элемент управления рисованием, который я сделал сам).

Часть работы объектов в инструменте рисованиязаключается в том, что он создается путем передачи объекта карты в конструктор.С моим объектом Map с именем x: Name = "Map" у меня есть следующее для моего drawcontrol:

<local:DrawRootControl x:Name="DrawRoot" Height="152" Margin="216,10,0,0" Grid.Row="1" VerticalAlignment="Top" Visibility="Collapsed" map="{Binding ElementName=Map}"/>

Затем в моем контроле, у меня есть это в коде:

public static readonly DependencyProperty mapProperty = DependencyProperty.Register
        (
             "map",
             typeof(Map),
             typeof(DrawRootControl),
             null
        );

    public Map map
    {
        get { return (Map)GetValue(mapProperty); }
        set { SetValue(mapProperty, value); }
    }

..........

public DrawRootControl()
    {
        // Required to initialize variables
        InitializeComponent();

        MyDrawObject = new Draw(map)
        {
            LineSymbol = CanvasDraw.Resources["DrawLineSymbol"] as LineSymbol,
            FillSymbol = CanvasDraw.Resources["DrawFillSymbol"] as FillSymbol
        };
        MyDrawObject.DrawComplete += MyDrawObject_DrawComplete;             
    }

Когда я отлаживаю, мой объект карты в моем конструкторе является нулевым.Я думал, что если карта будет создана ранее на главной странице, а затем пропущена, когда я сделаю эту привязку, она не будет нулевой и будет инициализирована и создана.Может я неправильно делаю переплет?Я не совсем понимаю обязательную вещь.

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 07 ноября 2011

Насколько я понимаю, когда страница XAML анализируется сверху вниз, объекты создаются в порядке.Это правильно?

да сверху вниз, как HTML.Пример:

<Grid x:Name="LayoutRoot" Background="White">
    <Rectangle Fill="#FFE53400" Height="132"  />
    <Rectangle Fill="#FF0000E5" Height="132" Margin="0,51,0,0" />
</Grid>

Часть того, как работают объекты в инструменте рисования, заключается в том, что он создается путем передачи объекта карты в конструктор.

Если вы зависите от другого элемента пользовательского интерфейса, вам нужно будет реализовать обратный вызов для отрисовки вашего элемента управления при изменении свойства DependencyProperty.В этом примере замените Title на Map

    public string Title
    {
        get { return (string)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }

    public static readonly DependencyProperty TitleProperty =
        DependencyProperty.Register("Title", typeof(string), typeof(ComparisonReport), new PropertyMetadata(null, OnTitleChanged));

    private static void OnTitleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var o = d as ComparisonReport;
        if (o != null && e.NewValue != null)
        {
            var n = ((ComparisonReport)d);
            n.RadChart1.DefaultView.ChartArea.AxisX.Title = String.Format("{0} Comparison", e.NewValue);
        }
    }

. Если вы написали собственный элемент управления, вы можете подождать, пока OnApplyTemplate (), после чего вы можете найти деталь (объект карты esri) по имени.Затем GetTemplateChild можно прикрепить к событиям esri, которые влияют на ваш пользовательский чертеж.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...