2017-04-20 117 views
2

我在根網格內有VisualStateManager,但它沒有觸發AdaptiveTrigger。我正在嘗試更改StackPanel中的textblock。另外,VisualState制定者優先於默認值的規則是什麼?例如,textblockCreateNewAccount正在使用x:Uid獲取字符串資源,但當setter試圖更改Text值時,哪一個獲得優先級?與由FontSize設置靜態資源樣式相同。 UWP AdaptiveTrigger不觸發

<Page.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Style/ApparentTheme.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Page.Resources> 

<Grid x:Name="MainGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="20 0 20 0"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup> 
      <VisualState x:Name="Mobile_720"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="720" /> 
       </VisualState.StateTriggers> 

       <VisualState.Setters> 
        <Setter Target="CreateNewAccount.FontSize" Value="12"/> 
        <Setter Target="CreateNewAccount.Text" Value="Test"/> 
       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 

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

    <StackPanel x:Name="FormStackPanel" Grid.Row="0" Grid.Column="1" Orientation="Vertical"> 
     <TextBlock x:Name="CreateNewAccount" x:Uid="CreateNewAccount" Style="{StaticResource TitleTextBlockStyle1366}"/> 
     <TextBox x:Uid="EmailField" x:Name="emailField" 
       Style="{StaticResource TextBoxStyle1366}" InputScope="EmailNameOrAddress" 
       Text="{Binding NewSignUp.Email, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <TextBox x:Uid="FirstNameField" x:Name="firstNameField" 
       Style="{StaticResource TextBoxStyle1366}" InputScope="AlphanumericFullWidth" 
       Text="{Binding NewSignUp.FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <TextBox x:Uid="LastNameField" x:Name="lastNameField" 
       Style="{StaticResource TextBoxStyle1366}" InputScope="AlphanumericFullWidth" 
       Text="{Binding NewSignUp.LastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <PasswordBox x:Uid="PasswordField" x:Name="passwordField" 
        Style="{StaticResource PasswordBoxStyle1366}" 
        Password="{Binding NewSignUp.Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <PasswordBox x:Uid="PasswordConfirmField" x:Name="passwordConfirmField" 
        Style="{StaticResource PasswordBoxStyle1366}" 
        Password="{Binding NewSignUp.PasswordConfirm, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <Button x:Uid="CreateAccountButton" 
       Style="{StaticResource ButtonStyle1366}" 
       Command="{Binding CreateAccountCommand}" Click="CreateAccountButton_Click"/> 
     <TextBlock x:Name="errorMessage" 
        FontSize="16pt" Foreground="Red" Margin="0 5 0 0" 
        Text="{Binding SignUpErrorMessage, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <ProgressRing x:Name="signUpProgressRing" 
         HorizontalAlignment="Center" IsActive="False" Height="30" Width="30"/> 
    </StackPanel> 
</Grid> 

+1

我試過你的樣品,和* AdaptiveTrigger *似乎觸發 - 首先我看到從資源的文本,然後窗口後調整我看到從觸發值。你看起來如何? – Romasz

+0

@Romasz嘿。是的,它確實觸發。我意識到了這個問題。我正在測試一個移動模擬器,即使它是720p,但它不是那裏。我在桌面上進行了測試,並調整了它的工作寬度。我也意識到MinWindowWidth屬性表明最好先設計一個小的外形因子,然後使用AdaptiveTrigger設置器對較大的寬度和高度進行更改。我正在做相反的事情。 – ShrimpCrackers

回答

0

最好是設計用於小形狀因數,並使用AdaptiveTrigger對於較大的寬度和高度。因爲我正在做相反的事情,並在較小的手機屏幕上進行測試,所以我無法看到這些變化。下面是修改後的XAML:

<Page 
x:Class="apparent_uwp.View.SignUpPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:apparent_uwp.View" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d"> 

<Page.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Style/ApparentTheme.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Page.Resources> 

<Grid x:Name="MainGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="20 0 20 0"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup> 
      <VisualState x:Name="Mobile_720"> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="720" /> 
       </VisualState.StateTriggers> 

       <VisualState.Setters> 
        <Setter Target="CreateNewAccount.FontSize" Value="24"/> 
        <Setter Target="MainGrid.ColumnDefinitions[0].Width" Value="*"/> 
        <Setter Target="MainGrid.ColumnDefinitions[2].Width" Value="*"/> 
       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 

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

    <StackPanel x:Name="FormStackPanel" Grid.Row="0" Grid.Column="1" Orientation="Vertical" Margin="10 0 10 0"> 
     <TextBlock x:Name="CreateNewAccount" x:Uid="CreateNewAccount" Style="{StaticResource TitleTextBlockStyle}"/> 
     <TextBox x:Uid="EmailField" x:Name="emailField" 
       Style="{StaticResource TextBoxStyle}" InputScope="EmailNameOrAddress" 
       Text="{Binding NewSignUp.Email, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <TextBox x:Uid="FirstNameField" x:Name="firstNameField" 
       Style="{StaticResource TextBoxStyle}" InputScope="AlphanumericFullWidth" 
       Text="{Binding NewSignUp.FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <TextBox x:Uid="LastNameField" x:Name="lastNameField" 
       Style="{StaticResource TextBoxStyle}" InputScope="AlphanumericFullWidth" 
       Text="{Binding NewSignUp.LastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <PasswordBox x:Uid="PasswordField" x:Name="passwordField" 
        Style="{StaticResource PasswordBoxStyle}" 
        Password="{Binding NewSignUp.Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <PasswordBox x:Uid="PasswordConfirmField" x:Name="passwordConfirmField" 
        Style="{StaticResource PasswordBoxStyle}" 
        Password="{Binding NewSignUp.PasswordConfirm, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <Button x:Uid="CreateAccountButton" 
       Style="{StaticResource ButtonStyle}" 
       Command="{Binding CreateAccountCommand}" Click="CreateAccountButton_Click"/> 
     <TextBlock x:Name="errorMessage" 
        FontSize="16pt" Foreground="Red" Margin="0 5 0 0" 
        Text="{Binding SignUpErrorMessage, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> 
     <ProgressRing x:Name="signUpProgressRing" 
         HorizontalAlignment="Center" IsActive="False" Height="30" Width="30"/> 
    </StackPanel> 
</Grid> 

+0

當窗口大小改變時,它似乎可以工作。那麼你的問題是什麼? –