Предотвращение перехода прокрутки в другое горизонтальное смещение при изменении масштаба календаря - PullRequest
1 голос
/ 23 апреля 2019

У меня есть вид календаря, который я масштабирую, увеличивая ширину дня (код ниже).При перемасштабировании, как я могу убедиться, что мой календарь сохраняет один и тот же вид в разных точках масштабирования (т.е.: - у меня 4 точки масштабирования, 25%, 50%, 75%, 100%, что означает увеличение ширины дняв календаре на 25%, 50% и т. д.)?Если моя текущая точка масштабирования составляет 100%, а мое горизонтальное смещение указывает на апрель 2018 года, то при изменении на 50% апрель 2018 года не сохраняется, и текущее горизонтальное смещение указывает на другой месяц.Как я могу убедиться, что сохраняется тот же самый вид?Какие-нибудь мысли?

<ScrollViewer Name="CalendarScroller" HorizontalScrollBarVisibility="Auto"
                      VerticalScrollBarVisibility="Disabled" 
                      ViewChanged="ScrollViewer_ViewChangedAsync" >
        <Grid Name="CalendarGrid" Margin="0,0,0,0">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Grid><ListView  Name="LayoutView"
                           SelectionMode="None" BorderThickness="0" 
                           ItemsSource="{x:Bind calendarVM.Calender,Mode=OneWay}"
                           Loaded="LayoutView_Loaded" 
                           >
                        <ListView.ItemsPanel>
                            <ItemsPanelTemplate>
                                <ItemsStackPanel Orientation="Horizontal" 
                                             />
                            </ItemsPanelTemplate>
                        </ListView.ItemsPanel>
                        <ListView.ItemTemplate>
                            <DataTemplate x:DataType="entity:Calendar" >
                                <Grid Margin="0,0,0,0" Padding="0" >
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="30"/>
                                        <RowDefinition Height="*"/>
                                    </Grid.RowDefinitions>
                                    <Grid Background="#FAFAFA">
                                        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" 
                                                       VerticalAlignment="Center" Margin="10,0,0,0">
                                        <TextBlock Text ="{x:Bind Month}" FontWeight="Bold" FontSize="14" />
                                        <TextBlock Text="{x:Bind Year}" Margin="2,0,0,0" FontWeight="Bold" FontSize="14"/>
                                    </StackPanel>
                                </Grid>
                                <Grid Grid.Row="1">
                                    <ListView  Grid.Row="1"                                                                                
                                               Name="LayoutDaysView"
                                               SelectionMode="None"                                          
                                               VerticalAlignment="Stretch" VerticalContentAlignment="Stretch"                                                                                                                                             
                                               ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                               ScrollViewer.HorizontalScrollMode="Enabled"
                                               ScrollViewer.IsHorizontalRailEnabled="True"
                                               ScrollViewer.VerticalScrollBarVisibility="Disabled"
                                               ScrollViewer.VerticalScrollMode="Disabled"
                                               ItemsSource="{x:Bind Days}"                                                   
                                               >
                                        <ListView.ItemsPanel>
                                            <ItemsPanelTemplate>
                                                <ItemsStackPanel Orientation="Horizontal"/>
                                            </ItemsPanelTemplate>
                                        </ListView.ItemsPanel>
                                        <ListView.ItemTemplate>
                                            <DataTemplate x:DataType="entity:Day">
                                                <Grid Margin="0,0,0,0" Padding="0" Background="Transparent">
                                                    <Grid.RowDefinitions>
                                                        <RowDefinition Height="30"/>
                                                        <RowDefinition Height="*"/>
                                                    </Grid.RowDefinitions>
                                                    <Grid.ColumnDefinitions>
                                                        <ColumnDefinition Width="*"/>
                                                    </Grid.ColumnDefinitions>
                                                    <Grid Background="#FAFAFA" 
                                                          Width="{x:Bind Width,Mode=TwoWay}"
                                                          Margin="0,0,0,0">
                                                        <Ellipse Width="28" Height="26" Fill="{x:Bind CurrentDayBg}" 
                                                         Margin="0,0,3,5"
                                                         Visibility="{x:Bind IsShowCurrentDay}"/>
                                                        <TextBlock Text="{x:Bind DayOfMonth}" Margin="0,1,3,0" FontSize="14"  
                                                                       Opacity="{Binding Opacity}" TextAlignment="Center" Foreground="{x:Bind CurrentDayFg}"  />
                                                    </Grid>
                                                    <Grid Width="{x:Bind Width,Mode=TwoWay}" Margin="0,0,0,0" 
                                                          Grid.Row="1"     MinHeight="{x:Bind Height}"
                                                          Background="{x:Bind DayBackground}">
                                                        <Border BorderBrush="#FAFAFA"  BorderThickness="0,0,2,0" 
                                                        HorizontalAlignment="Right" Grid.Row="2" />
                                                    </Grid>
                                                </Grid>
                                            </DataTemplate>
                                        </ListView.ItemTemplate>
                                    </ListView>
                                </Grid>
                            </Grid>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </Grid>
        </Grid>
    </ScrollViewer>

Код позади: - (Другое представление заголовка, имеющее ползунок масштабирования, вызывает событие, которое захватывается в этом представлении, чтобы инициировать изменение масштаба)

private void OnRescalingCalendar(int daysWidth)
            {

                foreach (var day in calendarVM.Calender.SelectMany(x => x.Days))
                    day.Width = daysWidth;
            }

[enter image description here][1]


  [1]: https://i.stack.imgur.com/yaPcM.png    
...