UWP Элемент поля элемента управления каруселью требует времени для обновления?

#uwp #uwp-xaml

#uwp #uwp-xaml

Вопрос:

Я использую элемент управления Carousel, где значение параметра ItemMargin вычисляется в серверной части следующим образом:

MainPage.xaml

  <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  x:Name ="DemoControl"
  SizeChanged="SizeChanged"
  mc:Ignorable="d">
<Grid>
<Border Margin="0">
  <controls:Carousel x:Name="CarouselControl"
              InvertPositive="True"
              ItemDepth="300"
              ItemRotationX="0"
              ItemRotationY="45"
              ItemRotationZ ="0"
              Orientation="Horizontal"
              SelectedIndex="4">
    <controls:Carousel.EasingFunction>
      <CubicEase EasingMode="EaseOut" />
    </controls:Carousel.EasingFunction>
    <controls:Carousel.ItemTemplate>
      <DataTemplate>
        <Image Width="200"
              Height="200"
              VerticalAlignment="Bottom"
              Source="{Binding Thumbnail}"
              Stretch="Uniform" />
      </DataTemplate>
    </controls:Carousel.ItemTemplate>
  </controls:Carousel>
</Border>
 

Код, лежащий в основе MainPage.xaml.cs

 public sealed partial class MainPage
{
   private void SizeChanged(object sender, SizeChangedEventArgs e)
    {
        this.UpdateMargin();
    }
    private void UpdateMargin()
    {
            this.DemoControl.ItemMargin = 500;
    }
 }
 

Я заметил, что при первой загрузке страницы объекты приближаются, но после прокрутки элемента управления расстояние увеличивается, а затем остается неизменным. Требуется ли некоторое время для обновления ItemMargin здесь?

Ответ №1:

UWP Элемент поля элемента управления каруселью требует времени для обновления?

Во время тестирования поле карусели могло отображаться правильно после загрузки первой страницы. Мы не можем предварительно представить вашу проблему. Однако я обнаружил, когда вы UpdateMargin на странице SizeChanged . Событие загрузки карусели еще не запущено. Я полагаю, что это будет проблема, описанная выше. В общем, если вы хотите обновить ItemMargin свойство, мы рекомендуем поместить его в событие Carousel loaded .

 private void CarouselControl_Loaded(object sender, RoutedEventArgs e)
{
    UpdateMargin();
}
 

Это может гарантировать, что свойство ItemMargin будет доступно.