2009-09-01 5 views
0

На моей странице default.aspx у меня есть некоторые инструменты ESRI (и некоторые команды) на панели инструментов, что-то вроде этого.Почему мои ESRI: объекты инструмента, у которых их изображения сброшены, когда я выбираю любой другой инструмент на странице?

<ToolbarItems> 
    <esri:Tool ClientAction="MapPoint('Map1','%toolbarItem%',false,'crosshair') DefaultImage="~/images/default_tool.gif" 
    EnablePostBack="True" JavaScriptFile="" Name="TestTool" SelectedImage="~/images/selected_tool.gif" DisabledImage="~/images/disabled_tool.gif" 
    ServerActionAssembly="Test.Web.Mapping" ServerActionClass="Test.Web.Mapping.TestTool" 
    Text="It's a tool!" ToolTip="Use it." /> 
</ToolbarItems> 

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

После запуска кода все работает красиво. Правильный инструмент отключен, и изображение изменилось соответствующим образом.

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

Похоже, что должен быть какой-то блок Javascript, работающий где-то, который сбрасывает состояние всех инструментов там, по умолчанию, как определено на странице Default.aspx. Однако у меня проблемы с поиском. Есть идеи?

EDIT: код для отключения кнопки является C# код, который что-то вроде следующего ...

foreach (InteractiveImageToolbarItem toolbarTool in toolbar.ToolbarItems) 
{ 
    // First check to see if the dictionary even contains the tool, if not we assume the tool is enabled for all themes, so enable it and 
    // move to the next iteration. 
    if (!enabledTools.Keys.Contains(toolbarTool.Name)) 
    { 
     toolbarTool.Disabled = false; 
     continue; 
    } 

    // So the tool is in the list, this loop checks to see if the tool is enabled for the current theme, meaning the theme is in the list 
    // associated with the tool. 
    foreach (string themeFromConfig in enabledTools[toolbarTool.Name]) 
    { 
     if (currentTheme != themeFromConfig) 
     { 
      toolbarTool.Disabled = true; 
     } 
     else 
     { 
      toolbarTool.Disabled = false; 
      break; 
     } 
    } 
} 

Он может видеть то, что должно быть включено, смотря на значениях конфигурации. Еще раз отметим, что эта часть отлично работает.

Обновление 9.09.09: Итак, я думаю, что знаю, в чем проблема. В Web ADF метод, который вызывается, ToolbarMouseDown, имеет вызов в конце этого ...

Toolbars[toolbarName].refreshGroup(); 

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

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

+0

Re: «У меня есть код». Вы имеете в виду код JavaScript или код C#, который отключает кнопку? –

+0

C# код, спецификация, опубликованная выше. – Carter

ответ

0

Когда элементы управления WebADF отображают страницу, они ссылаются на библиотеки JavaScript ADF. Вполне возможно, что в библиотеке по умолчанию есть что-то, что переписывает ваши настройки изображения.

Я бы предложил использовать Firebug, чтобы добавить точку останова javascript к функции onclick одного из ваших инструментов и пройти через javascript в WebADF и увидеть, что происходит.

+0

Я, по-видимому, не знаю, как это сделать. Элементы панели инструментов используют функцию javascript ToolbarMouseDown. Я не могу понять, как отлаживать его. Я знаю, в каком файле он находится, но это не часть моего решения. Firebug просто показывает скрипт как миниатюрный блок javascript. Я уверен, что вы предположили, что происходит, я просто не могу понять, как посмотреть, что именно происходит в коде. Есть ли у вас какие-либо идеи по отладке веб-ADF? – Carter