Почему мои ESRI: инструменты имеют свои изображения сбрасываются, когда я выбираю любой другой инструмент на странице? - PullRequest
0 голосов
/ 01 сентября 2009

На моей странице default.aspx у меня есть несколько инструментов 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. У меня проблемы с поиском, хотя. Есть идеи?

РЕДАКТИРОВАТЬ: Код для отключения кнопки - это код 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;
        }
    }
} 

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

Обновление от 3.09.09: Хорошо, так что я думаю, что знаю, в чем проблема. В Web ADF вызываемый метод ToolbarMouseDown имеет вызов в конце ...

Toolbars[toolbarName].refreshGroup();

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

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

1 Ответ

0 голосов
/ 01 сентября 2009

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

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

...