[Windows Phone] TextBlock and TextBox – Tips and Tricks – Part 2

Ở phần trước, bạn đã có một số tips and tricks khá thú vị phải ko?

Link phần trước: Phần 1

Trong phần này, bạn sẽ còn có nhiều điều thú vị hơn nữa

Text quá dài và vấn đề bị mất chữ

Chữ bị mất một cách vô cùng kỳ quái phải không?

Nguyên nhân

Tất cả các control trong Windows Phone đều có 1 giới hạn kích thước mặc định: 2000 pixel

2000 pixel lớn tới mức nào? màn hình laptop tiêu chuẩn là 1366 x 768. So sánh với 2000 x 2000. Vậy là hơn gấp đôi

nhưng đối với một số máy Windows Phone có độ phân giải Full HD (1900 x 1080), thì chỉ cần nhân đôi chiều rộng của máy ra là ta sẽ có 1 kích thước tối đa sao? Không phải vậy. Kích thước 2k chỉ áp dụng cho app Windows Phone 7

Khắc phục

Cách khắc phục rất đơn giản. Chia text của bạn ra nhiều phần, và gắn chúng vào các textblock khác nhau. Bao các textblock này trong ScrollViewer. Xong!

Selectable TextBlock

Textblock, dĩ nhiên là không select được rồi.

Vậy ta sẽ chỉnh một chút cho TextBox giống với TextBlock, để lợi dụng tính “Selectable” của nó

add code sau vào resource

<Style x:Key="TextBoxStyle1" TargetType="TextBox">             <Setter Property="Background" Value="{StaticResource PhoneBackgroundBrush}" />             <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}" />             <Setter Property="BorderBrush" Value="{StaticResource PhoneBackgroundBrush}" />             <Setter Property="SelectionBackground" Value="{StaticResource PhoneAccentBrush}" />             <Setter Property="SelectionForeground" Value="{StaticResource PhoneTextBoxSelectionForegroundBrush}" />             <Setter Property="Template">                 <Setter.Value>                     <ControlTemplate TargetType="TextBox">                         <Grid Background="Transparent">                             <VisualStateManager.VisualStateGroups>                                 <VisualStateGroup x:Name="CommonStates">                                     <VisualState x:Name="ReadOnly">                                         <Storyboard>                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="EnabledBorder" Storyboard.TargetProperty="Visibility">                                                 <DiscreteObjectKeyFrame KeyTime="0">                                                     <DiscreteObjectKeyFrame.Value>                                                         <Visibility>Collapsed</Visibility>                                                     </DiscreteObjectKeyFrame.Value>                                                 </DiscreteObjectKeyFrame>                                             </ObjectAnimationUsingKeyFrames>                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="DisabledOrReadonlyBorder" Storyboard.TargetProperty="Visibility">                                                 <DiscreteObjectKeyFrame KeyTime="0">                                                     <DiscreteObjectKeyFrame.Value>                                                         <Visibility>Visible</Visibility>                                                     </DiscreteObjectKeyFrame.Value>                                                 </DiscreteObjectKeyFrame>                                             </ObjectAnimationUsingKeyFrames>                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="DisabledOrReadonlyBorder" Storyboard.TargetProperty="Background">                                                 <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneBackgroundBrush}" />                                             </ObjectAnimationUsingKeyFrames>                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="DisabledOrReadonlyBorder" Storyboard.TargetProperty="BorderBrush">                                                 <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneBackgroundBrush}" />                                             </ObjectAnimationUsingKeyFrames>                                             <ObjectAnimationUsingKeyFrames Storyboard.TargetName="DisabledOrReadonlyContent" Storyboard.TargetProperty="Foreground">                                                 <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneForegroundBrush}" />                                             </ObjectAnimationUsingKeyFrames>                                         </Storyboard>                                     </VisualState>                                 </VisualStateGroup>                             </VisualStateManager.VisualStateGroups>                             <Border x:Name="EnabledBorder"                                     Margin="{StaticResource PhoneTouchTargetOverhang}"                                     Background="{TemplateBinding Background}"                                     BorderBrush="{TemplateBinding BorderBrush}"                                     BorderThickness="{TemplateBinding BorderThickness}">                                 <ContentControl x:Name="ContentElement"                                                 Margin="{StaticResource PhoneTextBoxInnerMargin}"                                                 HorizontalContentAlignment="Stretch"                                                 VerticalContentAlignment="Stretch"                                                 BorderThickness="0"                                                 Padding="{TemplateBinding Padding}" />                             </Border>                             <Border x:Name="DisabledOrReadonlyBorder"                                     Margin="{StaticResource PhoneTouchTargetOverhang}"                                     Background="Transparent"                                     BorderBrush="{StaticResource PhoneDisabledBrush}"                                     BorderThickness="{TemplateBinding BorderThickness}"                                     Visibility="Collapsed">                                 <TextBox x:Name="DisabledOrReadonlyContent"                                          Background="Transparent"                                          FontFamily="{TemplateBinding FontFamily}"                                          FontSize="{TemplateBinding FontSize}"                                          FontStyle="{TemplateBinding FontStyle}"                                          FontWeight="{TemplateBinding FontWeight}"                                          Foreground="{StaticResource PhoneDisabledBrush}"                                          IsReadOnly="True"                                          SelectionBackground="{TemplateBinding SelectionBackground}"                                          SelectionForeground="{TemplateBinding SelectionForeground}"                                          Template="{StaticResource PhoneDisabledTextBoxTemplate}"                                          Text="{TemplateBinding Text}"                                          TextAlignment="{TemplateBinding TextAlignment}"                                          TextWrapping="{TemplateBinding TextWrapping}" />                             </Border>                         </Grid>                     </ControlTemplate>                 </Setter.Value>             </Setter>         </Style>

Khi dùng, chỉ cần

<TextBox x:Name="testTextBox"                          IsReadOnly="True"                          Style="{StaticResource TextBoxStyle1}"                          Text="Hello world, afdafkj aflaskfjalk lakfaljfklak lfjlaksfjlask jfldsj lskadjfl dslfj lasjf lkasjfl"                          TextWrapping="Wrap" />
Thế là xong
 
 
Advertisements

2 thoughts on “[Windows Phone] TextBlock and TextBox – Tips and Tricks – Part 2

  1. A Tuan có thể chỉ dẫn chi tiết hơn được không. Sao e làm theo mà nó lỗi cái thẻ setter, nó không nhận ra được

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s