У меня есть вид календаря, который я масштабирую, увеличивая ширину дня (код ниже).При перемасштабировании, как я могу убедиться, что мой календарь сохраняет один и тот же вид в разных точках масштабирования (т.е.: - у меня 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