[英]How to use Adaptive UI for all Grid in XAML Windows 10?
我將Windows Phone 8 App遷移到Windows 10時遇到了新的術語Adaptive UI,發現它非常有用。但是當我為每個Grid應用Adaptive UI時,只有第一個Grid的UI會根據屏幕大小而變化,而不會更改其他UI我添加了以下代碼來實現這一目標。 請指出我做錯了什么?
<Grid x:Name="LayoutRoot" Background="{StaticResource AppBackGroundColor}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" MinHeight="517" />
</Grid.RowDefinitions>
<Grid Grid.Row="2">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LoginImage.Height" Value="60"/>
<Setter Target="LoginImage.Width" Value="60"/>
</VisualState.Setters>
</VisualState>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="720"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LoginImage.Height" Value="90"/>
<Setter Target="LoginImage.Width" Value="80"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".15*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="/Images/login.png"
Grid.Column="0"
x:Name="LoginImage"
/>
<Grid Grid.Column="1"
HorizontalAlignment="Left"
VerticalAlignment="Center">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="Headertxt1.FontSize" Value="25"/>
<Setter Target="Headertxt2.FontSize" Value="20"/>
</VisualState.Setters>
</VisualState>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="720"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="Headertxt1.FontSize" Value="30"/>
<Setter Target="Headertxt2.FontSize" Value="23"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="Login"
Name="Headertxt1"
Foreground="{StaticResource AppFontColor}"
Grid.Row="0"
FontWeight="Bold" />
<TextBlock
Name="Headertxt2"
Foreground="{StaticResource AppFontColor}"
Grid.Row="1"
TextWrapping="Wrap"/>
</Grid>
</Grid>
<Grid Grid.Row="3" Margin="0,25,0,0">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="EmailTxtBox.Height" Value="30"/>
<Setter Target="PwdBox.Height" Value="30"/>
<Setter Target="LoginButton.FontSize" Value="25"/>
<Setter Target="ForgotPwdButton.FontSize" Value="20"/>
</VisualState.Setters>
</VisualState>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="720"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="EmailTxtBox.Height" Value="50"/>
<Setter Target="PwdBox.Height" Value="50"/>
<Setter Target="LoginButton.FontSize" Value="38"/>
<Setter Target="ForgotPwdButton.FontSize" Value="24"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox
Style="{StaticResource MediumSizeTextBoxStyle}"
Grid.Row="0"
Name="EmailTxtBox"
Height="50"
InputScope="EmailSmtpAddress"
Margin="12,0,12,10"/>
<PasswordBox Name="PwdBox"
Grid.Row="1"
Style="{StaticResource MediumSizePwdBoxStyle}"
Margin="12,10,12,4"
Height="50"/>
<Button Content="Login"
Grid.Row="2"
Margin="12,20,12,0"
x:Name="LoginButton"
BorderThickness="0"
Foreground="Black"
Background="White"
HorizontalAlignment="Stretch"/>
<Button Content="Forgot Password"
Grid.Row="3"
Foreground="{StaticResource AppFontColor}"
FontSize="24"
Margin="0,10,0,10"
HorizontalAlignment="Center"
Name="ForgotPwdButton"
BorderThickness="0"
/>
</Grid>
<Image x:Name="Header_logo"
Source="/Images/rbkc_logo.png"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Visibility="Collapsed"
Margin="0,10,0,10"
Width="480"
Height="121" />
<Button x:Name="backButton" Margin="39,59,39,0"
Style="{StaticResource NavigationBackButtonNormalStyle}"
VerticalAlignment="Top"
AutomationProperties.Name="Back"
/>
</Grid>
控件作者或應用程序開發人員使用VisualStateManager.VisualStateGroups附加屬性將VisualStateGroup對象元素添加到XAML中控件模板定義的根元素。 在VisualStateGroup元素內,每個VisualState表示控件的離散視覺狀態。 每個VisualState都有一個代表UI狀態的名稱,該名稱可以由用戶更改,也可以由控制邏輯更改。 VisualState主要由一個Storyboard組成 。 此情節提要板針對單個依賴項屬性值,只要控件處於該可視狀態,就應該應用這些依賴項屬性值。 有關如何在XAML中編寫視覺狀態(包括示例代碼)的詳細信息,請參閱情節提要的故事板動畫 。
有關更多信息,請參見VisualStateManager 。
在不是頁面根元素的一個控件中添加VisualStateManager.VisualStateGroups
無效。 您可以將VisualStateManager.VisualStateGroups
添加到頁面的根Grid。 並將所有<VisualState>
添加到<VisualStateGroup>
。
順便說一句,你有一個誤解。 由於未明確指定“ Image
的Height
和“ Width
”,因此第一個網格的UI會根據屏幕大小而變化,“ Stretch
的默認值為“均勻”。 它將更改高度和寬度以適應Grid
。 因此,“自適應用戶界面”不適用於您的方案。
例如:
<Grid x:Name="LayoutRoot" Background="{StaticResource AppBackGroundColor}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LoginImage.Height" Value="60" />
<Setter Target="LoginImage.Width" Value="60" />
<Setter Target="Headertxt1.FontSize" Value="25" />
<Setter Target="Headertxt2.FontSize" Value="20" />
<Setter Target="EmailTxtBox.Height" Value="30" />
<Setter Target="PwdBox.Height" Value="30" />
<Setter Target="LoginButton.FontSize" Value="25" />
<Setter Target="ForgotPwdButton.FontSize" Value="20" />
</VisualState.Setters>
</VisualState>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="720" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="LoginImage.Height" Value="90" />
<Setter Target="LoginImage.Width" Value="80" />
<Setter Target="Headertxt1.FontSize" Value="30" />
<Setter Target="Headertxt2.FontSize" Value="23" />
<Setter Target="EmailTxtBox.Height" Value="50" />
<Setter Target="PwdBox.Height" Value="50" />
<Setter Target="LoginButton.FontSize" Value="38" />
<Setter Target="ForgotPwdButton.FontSize" Value="24" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" MinHeight="517" />
</Grid.RowDefinitions>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".15*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="/Images/login.png"
Grid.Column="0"
x:Name="LoginImage" />
<Grid Grid.Column="1"
HorizontalAlignment="Left"
VerticalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="Login"
Name="Headertxt1"
Foreground="{StaticResource AppFontColor}"
Grid.Row="0"
FontWeight="Bold" />
<TextBlock
Name="Headertxt2"
Foreground="{StaticResource AppFontColor}"
Grid.Row="1"
TextWrapping="Wrap" />
</Grid>
</Grid>
<Grid Grid.Row="3" Margin="0,25,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox
Style="{StaticResource MediumSizeTextBoxStyle}"
Grid.Row="0"
Name="EmailTxtBox"
Height="50"
InputScope="EmailSmtpAddress"
Margin="12,0,12,10" />
<PasswordBox Name="PwdBox"
Grid.Row="1"
Style="{StaticResource MediumSizePwdBoxStyle}"
Margin="12,10,12,4"
Height="50" />
<Button Content="Login"
Grid.Row="2"
Margin="12,20,12,0"
x:Name="LoginButton"
BorderThickness="0"
Foreground="Black"
Background="White"
HorizontalAlignment="Stretch" />
<Button Content="Forgot Password"
Grid.Row="3"
Foreground="{StaticResource AppFontColor}"
FontSize="24"
Margin="0,10,0,10"
HorizontalAlignment="Center"
Name="ForgotPwdButton"
BorderThickness="0" />
</Grid>
<Image x:Name="Header_logo"
Source="/Images/rbkc_logo.png"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Visibility="Collapsed"
Margin="0,10,0,10"
Width="480"
Height="121" />
<Button x:Name="backButton" Margin="39,59,39,0"
Style="{StaticResource NavigationBackButtonNormalStyle}"
VerticalAlignment="Top"
AutomationProperties.Name="Back" />
</Grid>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.