2010-07-13 7 views
1

У меня есть приложение Silverlight с некоторыми картами, и на той же странице это приложение работает, у меня есть таблица, описывающая значения, связанные с картой. Я хочу создать способ, чтобы при наведении мыши на какой-либо значок на карте строка с соответствующим идентификатором была подсвечена. Возможно ли это? Я использую простые asp-таблицы, на ASP MVC.Есть ли способ приложения Silverlight запускать javascript на странице ASP?

Следуя инструкциям AnthonyWJones, я сделал это:

Silverlight

 private void MapClick(object sender, RoutedEventArgs e) 
     { 
      for (int i = 0; i < 4; i++) 
      { 
       System.Windows.Controls.Primitives.ButtonBase button = (System.Windows.Controls.Primitives.ButtonBase)VisualTreeHelper.GetChild(RegionCanvas, i); 
       if (button.IsPressed) 
        HtmlPage.Window.Invoke("highlightRow",(int)button.DataContext); 



      } 
     } 

ASPX

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<script type="text/javascript"> 
    function highlightRow(id) { 
     id = "porto" + id; 
     document.getElementById(id).setAttribute("bgColor", "#123456"); 
    } 
</script> 


<%try{ %> 
     <h2><%:(String) Model.FirstOrDefault().estado%></h2> 
      <%} %> 
    <%catch (Exception e) { }%> 


    <table id="tblLayout"> 
    <tr> 
    <td><div style="height:300px"> 

     <object data="data:application/x-silverlight-2," 
      type="application/x-silverlight-2" height="300px" style="width: 400px"> 


      <param name="source" value="/ClientBin/MiniSIG.xap"/> 

      <param name="onError" value="onSilverlightError" /> 
      <param name="background" value="white" /> 
      <param name="minRuntimeVersion" value="3.0.40818.0" /> 
      <%try{ %> 
      <param name="initParams" value="startPage=<%:(String) Model.FirstOrDefault().estado%>" /> 
      <%} %> 

      <%catch (Exception e) { }%> 


      <%finally{ 
       if(Model.FirstOrDefault() == null){%> 
      <param name="initParams" value="startPage=main" /> 
      <%} }%> 
      <param name="autoUpgrade" value="true" /> 
      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40818.0" style="text-decoration:none"> 
       <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/> 
      </a> 
     </object> 

    </div> </td> 
    <td><table> 
     <tr> 
      <th> 
       ID do Porto 
      </th> 
      <th> 
       Nome 
      </th> 

      <th> 
      Cidade 
      </th> 
      <th> 
       ID da Cidade 
      </th> 
      <th> 
       Tipo 
      </th> 
     </tr> 

    <% foreach (var item in Model) { %> 

     <tr id="porto<%: item.idporto %>"> 

      <td> 
       <%: item.idporto %> 
      </td> 
      <td> 
       <%: Html.ActionLink(item.nome, "../Portos/Details/"+item.idporto)%> 
      </td> 

      <td> 
       <%: item.municipio %> 
      </td> 
      <td><%: item.idcidade %></td> 
      <td> 
       <%: item.tipo %> 
      </td> 
     </tr> 

    <% } %> 

    </table></td> 
    </tr> 

    </table> 

    <p> 
     <%: Html.ActionLink("Voltar", "Index") %> 
    </p> 

</asp:Content> 

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

+0

Одна вещь, которая выглядит странно, это использование кнопки '(int). DataContext', которая просто выглядит не так. Возможно, вы захотите расширить «это не сработало». Что оно делает? Вы пытались отладить javascropt? делает ли оно исключение? – AnthonyWJones

ответ

2

Существует несколько способов сделать это. Проще всего было бы просто использовать HtmlPage.Window: -

HtmlPage.Window.Invoke("someJSFuncName", myID); 

Содержащий страница может содержать в Javascript: -

function someJSFuncName(theID) 
{ 
    // Do Stuff with theID 

} 

Конечно, это создает тесную связь между Silverlight приложения и страницы, что может не желательно. Другой вариант более сложный, используя HtmlPage.RegisterScriptableObject. Это довольно грязно, поэтому я бы рекомендовал его, только если вам действительно нужно отменить XAP с главной страницы.

+0

Код, показанный выше, не работает (не знаю почему), но когда я создал метод MouseOver, он работал отлично! Большое спасибо! –

+0

Можно ли сделать это по-другому? Я имею в виду ... javascript задает атрибут в вызове silverlight, поэтому, когда я наводил указатель на мою таблицу, мое приложение silverlight выделяет данную точку. –

+0

Для меня он утверждал, что не может вызвать метод, но затем я посмотрел в javascript-консоли, и в моем коде была ошибка js. Я хотел упомянуть об этом, если у кого-то другая проблема. – Aligned

 Смежные вопросы

  • Нет связанных вопросов^_^