ASP.Net dinamicamente definir a largura de TreeView
Pergunta
Eu tenho uma exibição de árvore que pode ser em qualquer lugar a partir de 1 nível profundo para quase 6. Cada nó pode ser apenas algumas letras ou um par de palavras, totalizando até 20-30 caracteres.
Como faço para encontrar a maior largura de um texto do nó e adicionar a sua profundidade de deslocamento para definir a largura do treeview para que ele não passar por minhas fronteiras?
Se eu precisar adicionar mais informações, deixe-me saber.
Editar:
Aqui está o que eu tenho atualmente. Eu preciso definir a largura das panelLocations no carregamento da página de modo de exibição de árvore pode carregar corretamente dentro do mesmo.
<asp:Panel ID="panelLocations" runat="server" style="position:absolute;border:solid 1px #E0E0E0;padding:10px 5px 5px 10px;background-color:#F7F7F7;width:350px;display:none;" >
Search: <asp:TextBox ID="textboxLocationSearch" runat="server" AutoCompleteType="disabled" ToolTip="To find a store, type the 4 digit store number (e.g. 0001)" />
<asp:Button ID="buttonFindLocation" runat="server" Text="Find" OnClick="buttonFindLocation_Click" OnClientClick="LocationSelected();" style="width:60px;"/>
<input type="button" value="Cancel" onclick="HideLocations();" style="width:60px;"/>
<hr />
<asp:TreeView ID="TreeViewLocations" runat="server" OnSelectedNodeChanged="TreeViewLocations_SelectedNodeChanged" NodeIndent="10"></asp:TreeView>
</asp:Panel>
Solução
Uma vez que os navegadores web irá processar o conteúdo de forma diferente, a sua única opção para descobrir o real largura do conteúdo é usar javascript para atravessar os elementos DOM e medir a largura.
A solução mais limpa e mais simples é o de especificar uma largura suficientemente grande para o elemento de recipiente, em seguida, especificar um valor de overflow:scroll
para permitir que o conteúdo extra-grande para ser rolada. É muito feio ver barras de rolagem em torno dos elementos na página, mas quando você estiver usando uma estrutura de árvore-view, feio é algo que você viver.
Outras dicas
Você pode tirar vantagem do método MeasureText, no namespace Graphics. Basicamente, ele lhe dá de volta o tamanho de uma string deveria ser processado em um determinado tipo de letra e tamanho. Dada uma largura constante para cada nível intentation (você sabe, linhas de árvore, botões / ícones: você pode medir-lo estaticamente), você pode assumir necessária largura será o maior de:
measuredText + (level * indentationWidth)
HTH!