2016-10-06 2 views
0

Я хочу использовать скроллбар как ComboBox в моей DropDown кнопки, структура на самом деле это:Использовать ScrollBar в DropDownButton?

<Controls:DropDownButton Content="Nazioni" Width="120" Margin="0, 0, 20, 0" 
         ScrollViewer.VerticalScrollBarVisibility="Visible" 
         ScrollViewer.CanContentScroll="True" 
         ItemsSource="{Binding Countries}" 
         ItemTemplate="{StaticResource CombinedTemplate}"/> 

, но я не вижу ScrollViewer как вы можете видеть на картинке ниже:

enter image description here

+1

Я не использовал этот компонент, но во многих компонентах с прокруткой вы должны определить свойство высоты, прежде чем прокрутка будет работать. – Alex

+0

@Alex Итак, я предполагаю, что мне нужно создать ItemContainerTemplate с высотой по умолчанию и появится прокрутка? – Unchained

+2

Не обязательно. К сожалению, в WPF, где наблюдается прокрутка, похоже, существует довольно много непоследовательного поведения. – Alex

ответ

1

выпадающие из DropDownButton уже содержит ScrollViewer (она называется "SubMenuScrollViewer"), поэтому прокручивая ее элементы поддерживаются вне коробки. Дело в том, что конкретный ScrollViewer стилизовано иначе, чем по умолчанию ScrollViewer - если мы говорим о вертикальной прокрутке, она имеет две кнопки выше и ниже списка, ответственную за прокрутку вверх и вниз, соответственно, как показано ниже:

enter image description here

Так что лучше всего использовать этот стиль ScrollViewer, используя стиль по умолчанию, а не собственный. Просматривая MahApps.Metro source code, мы видим, что ScrollViewer подключен для использования динамического ресурса с ключевым значением {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}. Так что вам нужно сделать, это поставить стиль по умолчанию с помощью этого ключа для этого элемента управления:

<Controls:DropDownButton (...)> 
    <Controls:DropDownButton.Resources> 
     <Style x:Key="{ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}" 
       TargetType="{x:Type ScrollViewer}" 
       BasedOn="{StaticResource {x:Type ScrollViewer}}" /> 
    </Controls.DropDownButton.Resources> 
</Controls.DropDownButton> 

Таким образом ScrollViewer в раскрывающемся списке будет стиль со стилем по умолчанию поставляется с MahApps.Metro.

+0

Ваши ответы всегда самые лучшие. Спасибо. – Unchained

1

Чтобы убедиться, что прокрутка будет вести себя так, как ожидалось, вы не можете полагаться на WPF, чтобы разместить ScrollViewer там, где это должно быть.

Поскольку любой контент может располагаться в выпадающем меню, наилучшим вариантом является сброс ScrollViewer прямо на компонент. Таким образом, вы можете явно называть его и иметь доступ к его свойствам. Если вы свяжете свой список стран с полем lstContent, вы избавитесь от всех беспорядков.

<extToolkit:DropDownButton Content="Click Me" Margin="15" > 
     <extToolkit:DropDownButton.DropDownContent> 
      <ScrollViewer> 
       <ListBox Name="lstContent" ItemsSource="{Binding Countries}" ItemTemplate="{StaticResource CombinedTemplate}"/> 
      </ScrollViewer> 
     </extToolkit:DropDownButton.DropDownContent> 
    </extToolkit:DropDownButton> 
Смежные вопросы