Não é possível definir o DropDownHeight da caixa de combinação

Não consigo obter o conjunto DropDownHeight do ComboBox corretamente para exibir todos os itens.

Eu estou usando um controle que herda da caixa de combinação. Eu substituí os métodos OnDrawItem e OnMeasureItem para criar várias colunas e quebra de texto em uma coluna, se necessário. Isso tudo funciona bem.

O problema ocorre quando tento definir o DropDownHeight. Eu defino o DropDownHeight em um valor arbitrariamente grande, um pouco maior que a lista de itens. O controle ComboBox parece truncar automaticamente qualquer valor para DropDownHeight que seja maior que o tamanho de todos os itens exibidos na lista. (Supondo que você tenha a propriedade MaxDropDownItems definida acima do número de itens, o que eu faço.) Normalmente esse comportamento funciona perfeitamente, como mostrado abaixo:alt text http://www.freeimagehosting.net/uploads/dd09404697.png

Não, não são meus dados reais na caixa suspensa.

O problema ocorre quando tenho uma entrada na lista suspensa que precisa ser agrupada para exibir o texto completo. Essa entrada é exibida corretamente, mas, no entanto, a caixa de combinação está calculando o DropDownHeight, ele ignora o fato de que uma das entradas é duas vezes mais alta que o normal, então você precisa rolar uma linha para chegar à última entrada na lista suspensa.alt text http://www.freeimagehosting.net/uploads/d0ef715f83.png

Este é o código que estou usando para determinar se um item precisa de quebra de texto e para definir a altura de cada item:

 Protected Overrides Sub OnMeasureItem(ByVal e As System.Windows.Forms.MeasureItemEventArgs)
    MyBase.OnMeasureItem(e)
    //Determine the proper height of the current row in the dropdown based on
    //the length of the OptionDescription string.
    Dim tmpStr As String = FilterItemOnProperty(Items(e.Index), "OptionDescription")
    Dim lng As Single = e.Graphics.MeasureString(tmpStr, Me.Font).Width
    //Use the length of the item and the width of the column to calculate if wrapping is needed.
    Dim HeightMultiplier As Integer = Math.Floor(lng / _ColumnWidths(1)) + 1
    e.ItemHeight = e.ItemHeight * HeightMultiplier

 End Sub

Eu não posso determinar como forçar a propriedade DropDownHeight para ser exatamente o valor que eu quero ou como deixar o controle ComboBox saber que um (ou mais) dos itens na lista são mais altos que o normal.

Eu tenteiSobrepor Sombreie a propriedade DropDownHeight, mas isso parece não ter impacto.

EDITAR:
A mudança para o WPF faria esse problema desaparecer? (Há personalização suficiente nos controles padrão do WPF para que eu não precise escrever um controle personalizado para uma caixa de combinação de 3 colunas e altura variável?)

questionAnswers(4)

yourAnswerToTheQuestion