2015-08-19 1 views
0

Я пытаюсь изменить некоторые прикрепленные свойства с помощью VisualStateManager в проекте Windows 10 Universal App, но сеттеры не работают. Он не устанавливает прикрепленные свойства моего элемента TopBarGrid.VisualStateManager не устанавливает прикрепленные свойства Grid.Row и Grid.ColumnSpan в приложении UWP

Если вы посмотрите ниже, я использую обозначение круглых скобок, чтобы изменить свойства Grid.Row и Grid.ColumnSpan. Но когда я запускаю приложение, свойства не устанавливаются, когда я увеличиваю ширину. Я ожидаю, что сетка переместится на эту позицию.

Вот мой код:

<Grid> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup> 
      <VisualState x:Name="wideState"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="641" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="splitView.DisplayMode" Value="Inline"/> 
        <Setter Target="splitView.IsPaneOpen" Value="True"/> 
        <Setter Target="togglePaneButton.Visibility" Value="Collapsed"/> 
        <Setter Target="appHeader.Margin" Value="0,0,0,0"/> 
        <Setter Target="PaneHeader.Margin" Value="6,12,0,0"/> 
        <Setter Target="TopBarGrid.(Grid.Column)" Value="0"/> 
        <Setter Target="TopBarGrid.(Grid.RowSpan)" Value="2"/> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState x:Name="narrowState"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="0" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="splitView.DisplayMode" Value="Overlay"/> 
        <Setter Target="togglePaneButton.Visibility" Value="Visible"/> 
        <Setter Target="PaneHeader.Margin" Value="60,12,0,0"/> 
        <Setter Target="searchForInfoBox.Width" Value="270"/> 
       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
    <Grid.RowDefinitions> 
     <RowDefinition x:Name="TopRowHeight" Height="80"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="60"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid x:Name="TopBarGrid" Grid.Row="0" Grid.ColumnSpan="2"> 
     <toolbars:TopHorizontalToolBar/> 
    </Grid> 
    <Grid x:Name="LeftBarGrid" Grid.Column="0" Grid.RowSpan="2" Visibility="Collapsed"> 
     <toolbars:VerticalToolBar /> 
    </Grid> 
+0

К сожалению, это потому, что я работаю на виртуальной машине, и я не могу скопировать и вставить код. – Ray

+2

Конвертированное изображение в код. – Ray

ответ

4

Ваш код выглядит хорошо, однако, в обоих состояниях, вы устанавливаете и ColumnSpan из TopBarGrid к же значений. Вот почему вы не увидите никаких изменений.

Попробуйте удалить один комплект из одного состояния.


Причина, по которой до сих пор не вижу каких-либо изменений, скорее всего, потому что что-то не так с вашими Setter с вашей narrowState.

Пробуйте следующий код, обратите внимание, что TopBarGrid ведет себя правильно.

<Grid x:Name="LayoutRoot"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup> 
      <VisualState x:Name="wideState"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="641" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="TopBarGrid.(Grid.Column)" Value="0" /> 
        <Setter Target="TopBarGrid.(Grid.RowSpan)" Value="2" /> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState x:Name="narrowState"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="0" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="TopBarGrid.Background" Value="Green" /> 
       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition x:Name="TopRowHeight" Height="80" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="60" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Grid x:Name="TopBarGrid" Grid.Row="0" Grid.ColumnSpan="2" Background="Red" /> 
      <Grid x:Name="LeftBarGrid" Grid.Column="0" Grid.RowSpan="2" Visibility="Collapsed" /> 
    </Grid> 
</Grid> 

Но как только я бросаю в более Setter с (например, <Setter Target="PaneHeader.Margin" Value="60,12,0,0" />) к narrowState, она перестает работать. Я знаю, PaneHeader даже не был определен на моей тестовой странице! Но это также говорит мне, что VSM просто проглатывает ошибку по какой-то причине.

Итак, попробуйте удалить Setter и добавить их обратно один к одному, чтобы найти прослушанный. Тогда это будет простое исправление.

+0

Я попытался удалить один из них, но он все еще не работает. Я даже переместил VSM на вершину моего кода. Не уверен, что это делает что-то масштабное. – Ray

+0

@ Ray, см. Мой обновленный ответ. –

+0

Вспомните, вы также хотите, чтобы ваш vsm находился под вашей корневой панелью. –

0

@Ray Что касается TopBarGrid. (Grid.Column) вы должны предоставить PaneHeader. (FrameworkElement.Margin)

Смежные вопросы