I have a custom application in which i remove all tools and tabs except for my tools located in my config.daml using this code in the ConfigurationManager. All of my tools are used on the Map Tab.
<SPAN class="keyword token">protected</SPAN> <SPAN class="keyword token">override</SPAN> <SPAN class="keyword token">void</SPAN> <SPAN class="token function">OnUpdateDatabase</SPAN><SPAN class="punctuation token">(</SPAN>XDocument database<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">var</SPAN> nsp <SPAN class="operator token">=</SPAN> database<SPAN class="punctuation token">.</SPAN>Root<SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">.</SPAN>Namespace<SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">// select all elements that are tabs</SPAN>
<SPAN class="keyword token">var</SPAN> tabElements <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">from</SPAN> seg <SPAN class="keyword token">in</SPAN> database<SPAN class="punctuation token">.</SPAN>Root<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Descendants</SPAN><SPAN class="punctuation token">(</SPAN>nsp <SPAN class="operator token">+</SPAN> <SPAN class="string token">"tab"</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">select</SPAN> seg<SPAN class="punctuation token">;</SPAN>
<SPAN class="comment token">// collect all elements that need to be removed</SPAN>
<SPAN class="keyword token">var</SPAN> elements <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">HashSet</SPAN><SPAN class="operator token"><</SPAN>XElement<SPAN class="operator token">></SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">foreach</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">var</SPAN> tabElement <SPAN class="keyword token">in</SPAN> tabElements<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="comment token">// skip root and backstage elements</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>tabElement<SPAN class="punctuation token">.</SPAN>Parent <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN> <SPAN class="operator token">||</SPAN> tabElement<SPAN class="punctuation token">.</SPAN>Parent<SPAN class="punctuation token">.</SPAN>Name<SPAN class="punctuation token">.</SPAN>LocalName<SPAN class="punctuation token">.</SPAN><SPAN class="token function">StartsWith</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"backstage"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">continue</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">var</SPAN> id <SPAN class="operator token">=</SPAN> tabElement<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Attribute</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>id <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN> <SPAN class="operator token">||</SPAN> id<SPAN class="punctuation token">.</SPAN>Value<SPAN class="punctuation token">.</SPAN><SPAN class="token function">StartsWith</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"MYIDS"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
<SPAN class="keyword token">continue</SPAN><SPAN class="punctuation token">;</SPAN><SPAN class="comment token">//Skip our tabs</SPAN>
<SPAN class="punctuation token">}</SPAN>
elements<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Add</SPAN><SPAN class="punctuation token">(</SPAN>tabElement<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="comment token">// remove the elements</SPAN>
<SPAN class="keyword token">foreach</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">var</SPAN> element <SPAN class="keyword token">in</SPAN> elements<SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">{</SPAN>
element<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Remove</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="punctuation token">}</SPAN>
<SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>I think this might be an easy one, but I need to figure out why my application crashes when I load a layout from the code behind. This opens a layout tab. But when I click on one layout element (Text Element). The config application crashes with the following errors. My guess is this must have something to do with, when clicking on the Text Element in the layout tab, no menu exists for that Text Element? I think I need to add back in the layout menus and Tabs. But I really want my uses to only be able to use tools that I show in my configuration.
System<SPAN class="punctuation token">.</SPAN>InvalidOperationException
HResult<SPAN class="operator token">=</SPAN><SPAN class="number token">0x80131509</SPAN>
Message<SPAN class="operator token">=</SPAN>Sequence contains no matching element
Source<SPAN class="operator token">=</SPAN>System<SPAN class="punctuation token">.</SPAN>Core
StackTrace<SPAN class="punctuation token">:</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Linq<SPAN class="punctuation token">.</SPAN>Enumerable<SPAN class="punctuation token">.</SPAN>First<SPAN class="punctuation token">[</SPAN>TSource<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">(</SPAN>IEnumerable`<SPAN class="number token">1</SPAN> source<SPAN class="punctuation token">,</SPAN> Func`<SPAN class="number token">2</SPAN> predicate<SPAN class="punctuation token">)</SPAN>
at ArcGIS<SPAN class="punctuation token">.</SPAN>Desktop<SPAN class="punctuation token">.</SPAN>Framework<SPAN class="punctuation token">.</SPAN>TabManager<SPAN class="punctuation token">.</SPAN><SPAN class="token function">UpdateTabGroupCaption</SPAN><SPAN class="punctuation token">(</SPAN>String id<SPAN class="punctuation token">,</SPAN> String newCaption<SPAN class="punctuation token">)</SPAN>
at ArcGIS<SPAN class="punctuation token">.</SPAN>Desktop<SPAN class="punctuation token">.</SPAN>Layouts<SPAN class="punctuation token">.</SPAN>Element<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ActivateSelectedElementTab</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
at ArcGIS<SPAN class="punctuation token">.</SPAN>Desktop<SPAN class="punctuation token">.</SPAN>Layouts<SPAN class="punctuation token">.</SPAN>Layout<SPAN class="punctuation token">.</SPAN><SPAN class="operator token"><</SPAN><SPAN class="operator token">></SPAN>c__DisplayClass171_0<SPAN class="punctuation token">.</SPAN><SPAN class="operator token"><</SPAN>UpdateGUISelectionAsync<SPAN class="operator token">></SPAN><SPAN class="token function">b__0</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>ExceptionWrapper<SPAN class="punctuation token">.</SPAN><SPAN class="token function">InternalRealCall</SPAN><SPAN class="punctuation token">(</SPAN>Delegate callback<SPAN class="punctuation token">,</SPAN> Object args<SPAN class="punctuation token">,</SPAN> Int32 numArgs<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>ExceptionWrapper<SPAN class="punctuation token">.</SPAN><SPAN class="token function">TryCatchWhen</SPAN><SPAN class="punctuation token">(</SPAN>Object source<SPAN class="punctuation token">,</SPAN> Delegate callback<SPAN class="punctuation token">,</SPAN> Object args<SPAN class="punctuation token">,</SPAN> Int32 numArgs<SPAN class="punctuation token">,</SPAN> Delegate catchHandler<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>DispatcherOperation<SPAN class="punctuation token">.</SPAN><SPAN class="token function">InvokeImpl</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
at MS<SPAN class="punctuation token">.</SPAN>Internal<SPAN class="punctuation token">.</SPAN>CulturePreservingExecutionContext<SPAN class="punctuation token">.</SPAN><SPAN class="token function">CallbackWrapper</SPAN><SPAN class="punctuation token">(</SPAN>Object obj<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>ExecutionContext<SPAN class="punctuation token">.</SPAN><SPAN class="token function">RunInternal</SPAN><SPAN class="punctuation token">(</SPAN>ExecutionContext executionContext<SPAN class="punctuation token">,</SPAN> ContextCallback callback<SPAN class="punctuation token">,</SPAN> Object state<SPAN class="punctuation token">,</SPAN> Boolean preserveSyncCtx<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>ExecutionContext<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Run</SPAN><SPAN class="punctuation token">(</SPAN>ExecutionContext executionContext<SPAN class="punctuation token">,</SPAN> ContextCallback callback<SPAN class="punctuation token">,</SPAN> Object state<SPAN class="punctuation token">,</SPAN> Boolean preserveSyncCtx<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>ExecutionContext<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Run</SPAN><SPAN class="punctuation token">(</SPAN>ExecutionContext executionContext<SPAN class="punctuation token">,</SPAN> ContextCallback callback<SPAN class="punctuation token">,</SPAN> Object state<SPAN class="punctuation token">)</SPAN>
at MS<SPAN class="punctuation token">.</SPAN>Internal<SPAN class="punctuation token">.</SPAN>CulturePreservingExecutionContext<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Run</SPAN><SPAN class="punctuation token">(</SPAN>CulturePreservingExecutionContext executionContext<SPAN class="punctuation token">,</SPAN> ContextCallback callback<SPAN class="punctuation token">,</SPAN> Object state<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>DispatcherOperation<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Invoke</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>Dispatcher<SPAN class="punctuation token">.</SPAN><SPAN class="token function">ProcessQueue</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>Dispatcher<SPAN class="punctuation token">.</SPAN><SPAN class="token function">WndProcHook</SPAN><SPAN class="punctuation token">(</SPAN>IntPtr hwnd<SPAN class="punctuation token">,</SPAN> Int32 msg<SPAN class="punctuation token">,</SPAN> IntPtr wParam<SPAN class="punctuation token">,</SPAN> IntPtr lParam<SPAN class="punctuation token">,</SPAN> Boolean<SPAN class="operator token">&</SPAN> handled<SPAN class="punctuation token">)</SPAN>
at MS<SPAN class="punctuation token">.</SPAN>Win32<SPAN class="punctuation token">.</SPAN>HwndWrapper<SPAN class="punctuation token">.</SPAN><SPAN class="token function">WndProc</SPAN><SPAN class="punctuation token">(</SPAN>IntPtr hwnd<SPAN class="punctuation token">,</SPAN> Int32 msg<SPAN class="punctuation token">,</SPAN> IntPtr wParam<SPAN class="punctuation token">,</SPAN> IntPtr lParam<SPAN class="punctuation token">,</SPAN> Boolean<SPAN class="operator token">&</SPAN> handled<SPAN class="punctuation token">)</SPAN>
at MS<SPAN class="punctuation token">.</SPAN>Win32<SPAN class="punctuation token">.</SPAN>HwndSubclass<SPAN class="punctuation token">.</SPAN><SPAN class="token function">DispatcherCallbackOperation</SPAN><SPAN class="punctuation token">(</SPAN>Object o<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>ExceptionWrapper<SPAN class="punctuation token">.</SPAN><SPAN class="token function">InternalRealCall</SPAN><SPAN class="punctuation token">(</SPAN>Delegate callback<SPAN class="punctuation token">,</SPAN> Object args<SPAN class="punctuation token">,</SPAN> Int32 numArgs<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>ExceptionWrapper<SPAN class="punctuation token">.</SPAN><SPAN class="token function">TryCatchWhen</SPAN><SPAN class="punctuation token">(</SPAN>Object source<SPAN class="punctuation token">,</SPAN> Delegate callback<SPAN class="punctuation token">,</SPAN> Object args<SPAN class="punctuation token">,</SPAN> Int32 numArgs<SPAN class="punctuation token">,</SPAN> Delegate catchHandler<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>Dispatcher<SPAN class="punctuation token">.</SPAN><SPAN class="token function">LegacyInvokeImpl</SPAN><SPAN class="punctuation token">(</SPAN>DispatcherPriority priority<SPAN class="punctuation token">,</SPAN> TimeSpan timeout<SPAN class="punctuation token">,</SPAN> Delegate method<SPAN class="punctuation token">,</SPAN> Object args<SPAN class="punctuation token">,</SPAN> Int32 numArgs<SPAN class="punctuation token">)</SPAN>
at MS<SPAN class="punctuation token">.</SPAN>Win32<SPAN class="punctuation token">.</SPAN>HwndSubclass<SPAN class="punctuation token">.</SPAN><SPAN class="token function">SubclassWndProc</SPAN><SPAN class="punctuation token">(</SPAN>IntPtr hwnd<SPAN class="punctuation token">,</SPAN> Int32 msg<SPAN class="punctuation token">,</SPAN> IntPtr wParam<SPAN class="punctuation token">,</SPAN> IntPtr lParam<SPAN class="punctuation token">)</SPAN>
at MS<SPAN class="punctuation token">.</SPAN>Win32<SPAN class="punctuation token">.</SPAN>UnsafeNativeMethods<SPAN class="punctuation token">.</SPAN><SPAN class="token function">DispatchMessage</SPAN><SPAN class="punctuation token">(</SPAN>MSG<SPAN class="operator token">&</SPAN> msg<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Threading<SPAN class="punctuation token">.</SPAN>Dispatcher<SPAN class="punctuation token">.</SPAN><SPAN class="token function">PushFrameImpl</SPAN><SPAN class="punctuation token">(</SPAN>DispatcherFrame frame<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Application<SPAN class="punctuation token">.</SPAN><SPAN class="token function">RunDispatcher</SPAN><SPAN class="punctuation token">(</SPAN>Object ignore<SPAN class="punctuation token">)</SPAN>
at System<SPAN class="punctuation token">.</SPAN>Windows<SPAN class="punctuation token">.</SPAN>Application<SPAN class="punctuation token">.</SPAN><SPAN class="token function">RunInternal</SPAN><SPAN class="punctuation token">(</SPAN>Window window<SPAN class="punctuation token">)</SPAN>
at <SPAN class="token function">main</SPAN><SPAN class="punctuation token">(</SPAN>String<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN> args<SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>