Автоматическое изменение размера выпадающего списка ComboBox для содержимого в Silverlight - PullRequest
2 голосов
/ 16 апреля 2009

У меня есть этот ComboBox в моем пользовательском контроле Silverlight:

       <ComboBox  
            AutomationProperties.AutomationId="cmbProjects" 
            Grid.Row="0" 
            Grid.Column="2" 
            ItemsSource="{Binding Projects}"
            SelectedItem="{Binding SelectedProject, Mode=TwoWay}"
            Style="{StaticResource DefaultComboBoxStyle}"                       
            >
            <ComboBox.ItemTemplate>
                <DataTemplate>                   
                    <StackPanel>
                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
                            <TextBlock Foreground="DarkRed" AutomationProperties.AutomationId="{Binding Number}" Width="100" Margin="0" Text="{Binding Number, Converter={StaticResource StringFormatter},ConverterParameter='\{0\}'}" />
                            <TextBlock AutomationProperties.AutomationId="{Binding Description}" Text="{Binding Description, Converter={StaticResource StringFormatter},ConverterParameter='\{0\}       '}"  />
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

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

В WPF я мог бы просто установить ширину контейнера элементов на auto; в Silverlight это приводит к катастрофической ошибке. Я могу установить для параметра огромное значение, но свиток все равно появляется, независимо от ширины. Кроме того, в Silverlight 2 beta 2 было свойство DropDownWidth с одним из параметров «Авто», которого в RTM я не вижу.

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

И.Б..

Ответы [ 2 ]

2 голосов
/ 16 апреля 2009

Похоже, они исправили это в SL3.

Если вы хотите настроить всплывающее окно, вы можете сделать это из шаблона управления ComboBox. В Blend выполните следующие действия:

  1. Щелкните правой кнопкой мыши ComboBox
  2. Выберите «Редактировать элементы управления (шаблон)»
  3. Выберите «Редактировать копию»

Это скопирует стиль и шаблон элемента управления «из коробки», чтобы вы могли настроить ScrollViewer из всплывающего окна ComboBox для вашего сердца.

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

0 голосов
/ 10 июня 2011

Вы можете использовать свойство MaxDropDownHeight элемента управления ComboBox.

...