Itemscontrol Scrollviewer не работает с данными

#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>