#wpf #xaml #scrollviewer
#wpf #xaml #scrollviewer
Вопрос:
Я искал повсюду, и хотя, похоже, у всех возникает эта проблема, я не могу найти решение для моей конкретной проблемы..
Вот в чем проблема. Я хочу создать пользовательский элемент управления календарем. Чтобы сделать это, я заполняю ItemsControl текстовыми блоками, а затем помещаю scrollviewer вокруг него.
Но по какой-то причине полоса прокрутки scrollviewer кажется отключенной, и, похоже, она не распознает, что она заполнена данными.
Вот мой код
<Grid>
<ScrollViewer>
<ItemsControl ItemsSource="{Binding CalendarDates}" Height="75">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="local:Calender">
<TextBlock Name="CalendarDate" FontSize="12" Text="{Binding}" TextAlignment="Right" VerticalAlignment="Top" Height="Auto"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" Columns="7"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</Grid>
И вот мой MainWindow.xaml, где я его инициализирую
<Grid>
<!--Row Definitins -->
<Grid.RowDefinitions>
<RowDefinition Height = "Auto"/>
<RowDefinition Height = "*"/>
<RowDefinition Height = "Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="25*"/>
<ColumnDefinition Width="10*"/>
</Grid.ColumnDefinitions>
<localControl:Calender Grid.Column="1" Grid.Row="1"/>
</Grid>
Код отлично заполняет scrollviewer, но, как я уже говорил выше, полоса прокрутки кажется отключенной, и даже когда я жестко задаю размер, она все равно не работает!
Также я уже пытался установить SccrollViewer.VerticalScrollbar= Visible и высоту scrollviewer, а также более десятка «исправлений» здесь, в Stack Overflow, но ни одно из них не работает в моем случае
Комментарии:
1. «полоса прокрутки» — это горизонтальная полоса прокрутки?
2. Нет, вертикальная полоса прокрутки в Scrollviewer. И это видно, похоже, что он просто не работает с данными, которые я ввел. Поверьте мне, я проверил все ваши вопросы по этому поводу, и это не дубликат ни одного из них.
Ответ №1:
Я нашел ответ… Сам шаблон ItemsControl не поддерживает scrollviewer.
Я нашел ответ в этом журнале на странице 38.
https://dncmagazine.blob.core.windows.net/edition20/DNCMag-Issue20.pdf
Нам нужно изменить шаблон ItemsControl следующим образом:
<ItemsControl.Template>
<ControlTemplate TargetType= "ItemsControl">
<ScrollViewer>
<ItemsPresenter/>
</ScrollViewer>
</ControlTemplate>
</ItemsControl.Template>