Bing Maps Silverlight - Добавление всплывающих подсказок к пинам, созданным в C # - PullRequest
1 голос
/ 11 июля 2011

Я пытаюсь преобразовать реализацию карты Bing, которая использует стандартные PushPins для заполнения карты, но мне нужно добавить всплывающую подсказку к каждому выводу.Я нашел несколько вариантов того, как сделать это на веб-сайте, но проблема в том, что мне нужно, чтобы кнопки были отличными друг от друга динамичным образом.В зависимости от свойств каждого вывода он должен иметь различный цвет фона.

В коде, который уже есть на этом сайте, программист использует изображение кнопки при настройке.

Так что сейчас мне нужен способ создания шаблонной метки, которая способна поддерживать внешний вид и свойства метки (чтобы я мог задавать фон), при этом позволяя всплывающую подсказку.Или вместо того, чтобы иметь обычную метку, есть всплывающая подсказка или всплывающее окно.

Любая помощь приветствуется!

Отредактировано:

Шаблон управления Я использую

<ControlTemplate x:Key="NewPins" >

        <Grid x:Name="pushPin" >

            <Popup IsOpen="False" behaviors:RolloverPopup.HideDelay="0" behaviors:RolloverPopup.Target="{Binding ElementName=pushPin}"  Margin="30,-20,0,0"  >
                <Border Background="White" BorderBrush="Black" CornerRadius="10" BorderThickness="1">
                    <StackPanel Orientation="Vertical" >
                        <TextBlock Text="{Binding Title}" Foreground="Black" FontWeight="Bold" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10" />
                        <TextBlock Text="{Binding Content}" Foreground="Black" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10" />
                    </StackPanel>
                </Border>
            </Popup>
        </Grid>

    </ControlTemplate>

Это настройка пин-кода в C #

Pushpin pin = new Pushpin() 
                    { 
                        Location = new Location( Double.Parse(item.PinLat), Double.Parse(item.PinLong)),
                        Content=String.Concat( GetNewlineString(item.LocationName), GetNewlineString(item.CallerName), GetNewlineString(item.PhoneNumber)),
                        Template=(ControlTemplate)Application.Current.Resources["NewPins"],
                        Width = 50,
                        Height = 65,
                    };

И это создание карты Bing

<c:BingMapAdSmart 
         AnimationLevel="UserInput"
         Pins="{Binding DashboardViewModel.MapPins}" 
         NavigationVisibility="Visible"
         SetViewZoomFactor="0"
         MaxZoomLevel="7"
         Visibility="{Binding NavViewModel.IsViewTransitioning, Converter={StaticResource TrueToCollapsedConverter}}" />

Ответы [ 4 ]

0 голосов
/ 09 сентября 2011

Я только решил эту проблему к своему полному удовлетворению. Для этого вам нужно создать стиль канцелярской кнопки с ключом. Затем внутри этой канцелярской кнопки вы создаете стандартную канцелярскую кнопку (вы можете использовать для нее другой стиль, но не позволяете ей вернуться к этому стилю, я использовал значение по умолчанию) и всплывающее окно, чтобы согласиться с ним. Ниже приведен пример, я использую локальный инструмент для создания всплывающих всплывающих окон, в противном случае его стандартные вещи + карты привязки.

<Style TargetType="bingMaps:Pushpin" x:Key="NewPins2">

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate  TargetType="bingMaps:Pushpin" >

                <Grid x:Name="pushPin" >
                    <Border  Width="50" Height="65" >
                        <bingMaps:Pushpin Background="{TemplateBinding Background}" />
                    </Border>

                    <Popup IsOpen="False" behaviors:RolloverPopup.HideDelay="0" behaviors:RolloverPopup.Target="{Binding ElementName=pushPin}"  Margin="30,-20,0,0"  >
                        <Border Background="White" BorderBrush="Black" CornerRadius="10" BorderThickness="1">
                            <StackPanel Orientation="Vertical" >
                                <TextBlock Text="{Binding Title}" Foreground="Black" FontWeight="Bold" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10" />
                                <TextBlock Text="{Binding Content}" Foreground="Black" TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10" />
                            </StackPanel>
                        </Border>
                    </Popup>
                </Grid>

            </ControlTemplate>
        </Setter.Value>
    </Setter>

</Style>
0 голосов
/ 13 июля 2011

Я сделал именно то, что вы описываете.То, как я это сделал, имеет для меня наибольшее значение.Вот что я сделал:

  • Я создал пользовательский Pushpin (т.е. UserControl).Этот Xaml определяет мой пользовательский значок.Предполагается, что эта метка должна быть привязана к данным.Одним из связанных свойств является цвет фона.Это легко удовлетворит вашу проблему с динамическим цветом.
  • В элементе управления картой Bing я определил следующее:

  • Определен MyPushpinTemplateв UserControl.Resources как это:

MyPushpinControl является UserControl.

  • У меня также есть класс модели данных (который реализуетINotifyPropertyChanged).Этот класс привязан к экземпляру MyPushpinControl.этот класс модели данных имеет все свойства и привязан к данным для UserControl.

Это технически все, что вам нужно знать.Чтобы решить вашу проблему с всплывающей подсказкой, я просто добавил подсказку к одной из панелей в моей настраиваемой кнопке.Все просто.

0 голосов
/ 04 августа 2011

Пока у меня нет лучшего решения, я решил, что единственное, что я могу сделать, - это создать несколько различных выводов для использования.Мне не нужно бесконечное цветовое решение, так что около 15 различных выводов должны сделать свое дело.Грязно, но это будет работать.

0 голосов
/ 12 июля 2011

Возможно, я не совсем правильно понял ваш вопрос, но я предполагаю, что вам нужны кнопки, которые создаются динамически на основе шаблона, верно?И вы хотите иметь возможность независимо изменять подсказку (свойство содержимого, которое я предполагаю).

Если это так, сначала вам нужно поместить ресурс шаблона в ваши ресурсы в xaml;

   <phone:PhoneApplicationPage.Resources>
       <ControlTemplate x:Key="template_name" TargetType="m:Pushpin">
            ...this is your design part you can compile this xaml via Expression
       </ControlTemplate>
   </phone:PhoneApplicationPage.Resources>

, тогда вам нужно будет передать это значение каждому кнопочному элементу, который вы динамически создали.На этом этапе вы также можете установить их свойство контента, поскольку у них нет свойства уведомления, я не знаю, имеете ли вы это в виду, но свойство контента такое же.Вы можете редактировать их так же, как редактируете другие материалы;

   myPushPin.template = (ControlTemplate)This.Resources["template_name"];
   myPushPin.Content = "Hello World!";

Этот этап может отличаться в зависимости от того, куда вы помещаете свои ресурсы, если он находится в телефоне: PhoneApplicationPage.Resources

, если вы добавляете в Application.Resourcesиспользуйте это;

   myPushPin.template = (ControlTemplate)Application.Current.Resources["template_name"];
   myPushPin.Content = "Hello World!";

Это должно работать, у меня на этом компьютере не установлены API карт Bing или инструменты WP7, поэтому я не могу его протестировать, но это должно быть в порядке.

Удачного кодирования!


Редактировать: Поэтому, если вы хотите изменить фон кнопки, вам не нужно сдерживать ее, не имеет значения, имеет ли она шаблон элемента управления или нет.На самом деле каждый элемент управления имеет один по умолчанию.Вы можете изменить фон, как всегда

   myPushpin.Background = new SolidColorBrush(Colors.Blue);
...