2016-05-31 1 views
1

Ниже представлена ​​структура страницы.UWP Visual State Manager не видит содержимое DataTemplate

<ScrollViewer VerticalScrollBarVisibility="Auto"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="VisualStateGroup"> 
      <VisualState x:Name="VisualStateNarrow"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="1"/> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 

       </VisualState.Setters> 
      </VisualState> 
      <VisualState x:Name="VisualStateWide"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="800"/> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 


       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 


    <Grid Background="White"> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <Pivot x:Name="PivotPlatform" Margin="0" ItemsSource="{Binding PivotItems}" Grid.Row="2"> 


     <Pivot.HeaderTemplate> 
      <DataTemplate> 
       <StackPanel Height="0" Width="0"> 
        <TextBlock Text="{Binding}" /> 
       </StackPanel> 
      </DataTemplate> 
     </Pivot.HeaderTemplate> 

     <Pivot.ItemTemplate> 
      <DataTemplate> 
       <Grid xmlns:uwp="using:AmazingPullToRefresh.Controls"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="*" /> 
        </Grid.RowDefinitions> 

        <uwp:PullToRefreshAdorner.Extender> 
         <uwp:PullToRefreshExtender RefreshRequested="PullToRefreshExtender_RefreshRequested" /> 
        </uwp:PullToRefreshAdorner.Extender> 

        <RelativePanel x:Name="contentPanel" Grid.Row="0" Margin="10 -30 10 10"> 
         <TextBlock Name="titleTB" Text="{Binding Title}" FontSize="12" 
            RelativePanel.AlignLeftWithPanel="True" 
            RelativePanel.AlignTopWithPanel="True"/> 
         <TextBlock Name="totalTB" Text="{Binding Total}" FontSize="18" 
           RelativePanel.AlignLeftWithPanel="True" 
           RelativePanel.Below="titleTB" /> 
         <ProgressBar Name="progressBar" Value="{Binding ProgressValue}" Width="100" Foreground="{StaticResource currentThemeColor}" 
            RelativePanel.AlignLeftWithPanel="True" RelativePanel.Below="totalTB" 
            Margin="0 5 0 0"/> 
         <TextBlock Name="dateTB" Text="{Binding Date}" FontSize="16" 
           RelativePanel.AlignRightWithPanel="True" 
           RelativePanel.AlignTopWithPanel="True" /> 
        </RelativePanel> 

         <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto"> 
          <Charting:Chart Grid.Row="1" x:Name="LineChart" 
            Margin="10" > 
           <Charting:LineSeries Title="" IndependentValuePath="Name" DependentValuePath="Amount" 
              IsSelectionEnabled="False" ItemsSource="{Binding Result}" /> 

          </Charting:Chart> 
         </ScrollViewer> 

        </Grid> 
      </DataTemplate> 
     </Pivot.ItemTemplate> 

    </Pivot> 

Когда я добавляю сеттера для dateTB TextBlock в VisualState.Setters, чтобы переместить его в левую сторону относительной панели, я получаю сообщение об ошибке сказав:

Анимация пытается изменить объект с именем 'dateTB', но такой объект не может быть найден на странице.

Код для добавления сеттера:

<Setter Target="dateTB.(RelativePanel.AlignLeftWithPanel)" Value="True"/> 

Есть ли способ контролировать этот TextBlock с помощью визуального состояния диспетчера с этой страницей структурой?

+0

Ваш * TextBlock * находится внутри * DataTemplate *, поэтому вы получаете исключение. – Romasz

+0

@Romasz Да, это так. Но когда я удаляю DataTemplate, я получаю сообщение об ошибке, указывающее, что ItemTemplate не поддерживает тип Grid. Знаете ли вы способ сделать ItemTemplate, который будет виден из VisualStateManager? – alminh

+2

Вы пытались поместить своего зрителя в шаблон данных под подставку? – Romasz

ответ

4

Это проблема областей имен, общих для всех пользовательских интерфейсов XAML. Ваш VSM находится в области имени вашего UserControl или Page, а TextBlock - в DataTemplate.

Решение Romasz по вашей проблеме для размещения VSM внутри DataTemplate ставит все, что вам нужно, в единую область имен и является лучшим решением этой проблемы.