На моей странице 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 или что-то еще? То, что я думаю, должно произойти, когда изображение сбрасывается, чтобы быть включенным, мне нужно немедленно вернуть его к отключению.