windows phone 7.1 中两个新增控件

转载自:http://www.cnblogs.com/randylee/archive/2011/06/01/2065503.html

RichTextBox

wp7中,所有的控件都无法实现图文混排,这个控件解决了无法图文混排的问题,使微博和聊天软件不在只是文字显示那么单调了。但是这个控件目前还并不完善,只能够显示而无法进行输入,另外使用起来也比较麻烦。以下就是这个控件的使用方法:

1.       XAML中直接添加

这个控件无法显示在ToolBox列表中,需要通过手工方式来自已添加。

< RichTextBox  Width ="400"  Height ="400"  Background ="White"  IsReadOnly ="True"  FontSize ="30"  VerticalContentAlignment ="Top" >

                
< Paragraph >

                    
< Run  Foreground ="Red"  FontStyle ="Italic"  Text ="Red Text" />

                
</ Paragraph >

                
< Paragraph  Foreground ="Blue" >

                    
< Run  Text ="Blue Text " />

                    
< Bold > This is bold </ Bold >

                
</ Paragraph >

                
< Paragraph  Foreground ="Black" >

                    
< Run  Text ="Black Text " />

                    
< Hyperlink > Click Here </ Hyperlink >

                    
< Bold > test Bold Text </ Bold >

                
</ Paragraph >

                
< Paragraph >

                    A RichTextBox with
< Bold > initial content </ Bold >  in it.

                
</ Paragraph >

        

            
</ RichTextBox >

 

这样就实现了图文混排,以及多种文字效果的同时显示。

2.       代码实现

RichTextBox rtb  =   new  RichTextBox();

            rtb.Width 
=   400 ;

            rtb.Height 
=   400 ;

            rtb.FontSize 
=   30 ;

            rtb.Background 
=   new  SolidColorBrush(Colors.White);

            rtb.VerticalContentAlignment 
=  System.Windows.VerticalAlignment.Top;

 

            Paragraph parag 
=   new  Paragraph();

            Run run 
=   new  Run();

            run.Foreground 
=   new  SolidColorBrush(Colors.Red);

            run.Text 
=   " Red Text " ;

            parag.Inlines.Add(run);

            rtb.Blocks.Add(parag);

 

            parag 
=   new  Paragraph();

            parag.Foreground 
=   new  SolidColorBrush(Colors.Blue);

            run 
=   new  Run();

            run.Text 
=   " Blue Text " ;

            parag.Inlines.Add(run);

 

 

            Bold bold 
=   new  Bold();

            bold.Inlines.Add(
" This is bold Text " );

            parag.Inlines.Add(bold);

 

            rtb.Blocks.Add(parag);

 

            parag 
=   new  Paragraph();

            parag.Foreground 
=   new  SolidColorBrush(Colors.Black);

            run 
=   new  Run();

            run.Text 
=   " Black Text " ;

            parag.Inlines.Add(run);

 

            Hyperlink hl 
=   new  Hyperlink();

            hl.Inlines.Add(
" Click Here " );

            parag.Inlines.Add(hl);

 

            bold 
=   new  Bold();

            bold.Inlines.Add(
" test Bold Text " );

            parag.Inlines.Add(bold);

            run 
=   new  Run();

            run.Text 
=   " A RichTextBox with " ;

            parag.Inlines.Add(run);

            bold 
=   new  Bold();

            bold.Inlines.Add(
" initial content " );

            parag.Inlines.Add(bold);

            run 
=   new  Run();

            run.Text 
=   " in it. " ;

            parag.Inlines.Add(run);

 

            rtb.Blocks.Add(parag);

 

            ContentPanel.Children.Add(rtb);

 

这两种方法实现的是同一个效果。

3.       注意事项

这个控件在加入到工程之前,需要在APP.xaml文件的Resource节中添加如下xaml,否则无法显示。

< Application.Resources >

        
< Style  TargetType ="RichTextBox" >

            
< Setter  Property ="FontSize"  Value ="{StaticResource PhoneFontSizeNormal}"   />

            
< Setter  Property ="Foreground"  Value ="{StaticResource PhoneForegroundBrush}"   />

            
< Setter  Property ="Background"  Value ="Transparent"   />

            
< Setter  Property ="BorderBrush"  Value ="Transparent"   />

            
< Setter  Property ="BorderThickness"  Value ="0" />

            
< Setter  Property ="HorizontalContentAlignment"  Value ="Stretch"   />

            
< Setter  Property ="VerticalContentAlignment"  Value ="Center"   />

            
< Setter  Property ="Padding"  Value ="0"   />

            
< Setter  Property ="Template" >

                
< Setter.Value >

                    
< ControlTemplate  TargetType ="RichTextBox" >

                        
< Grid  Background ="Transparent" >

                            
< Border  Background ="{TemplateBinding Background}"  

                        BorderBrush
="{TemplateBinding BorderBrush}"

                        BorderThickness
="{TemplateBinding BorderThickness}"

                        Margin
="{StaticResource PhoneHorizontalMargin}" >

                                
< ContentControl  x:Name ="ContentElement"

                            HorizontalContentAlignment
="{TemplateBinding HorizontalContentAlignment}"

                            VerticalContentAlignment
="{TemplateBinding VerticalContentAlignment}"

                            Padding
="{TemplateBinding Padding}" />

                            
</ Border >

                        
</ Grid >

                    
</ ControlTemplate >

                
</ Setter.Value >

            
</ Setter >

        
</ Style >

    
</ Application.Resources >

 

另外,目前只能添加HyperlinkButton控件到RichTextBox中,Image控件加入后,当在模拟器中运行时,无法显示。

windows phone 7.1 中两个新增控件_第1张图片 

ViewBox

这个控件可以对加入其内的控件进行缩放、拉伸等的操作。

1.       常用属性

Stretch:与图片的这个属性基本相同。

StretchDirection:这个属性用于设置子控件的缩放方向。

UpOnly:放大

DownOnly:缩小

Both:放大或缩小

FlowDirection:设置子控件的放置方向。

 

 

 

2.       示例代码

< StackPanel  Grid.Row ="0"  Grid.Column ="0"  Margin ="5,5,5,5"  Orientation ="Vertical" >

                
< TextBlock  Text ="Stretch"  FontWeight ="Bold"  FontSize ="12"   />

                
< Button  Name ="btn1"  Click ="stretchNone"  Content ="None"   />

                
< Button  Name ="btn2"  Click ="stretchFill"  Content ="Fill"   />

                
< Button  Name ="btn3"  Click ="stretchUni"  Content ="Uniform"   />

                
< Button  Name ="btn4"  Click ="stretchUniFill"  Content ="UniformToFill"   />

            
</ StackPanel >

 

            
< StackPanel  Grid.Row ="0"  Grid.Column ="1"  Margin ="5,5,5,5"  Orientation ="Vertical" >

                
< TextBlock  Text ="StretchDirection"  FontWeight ="Bold"  FontSize ="12"   />

                
< Button  Name ="btn5"  Click ="sdUpOnly"  Content ="UpOnly"   />

                
< Button  Name ="btn6"  Click ="sdDownOnly"  Content ="DownOnly"   />

                
< Button  Name ="btn7"  Click ="sdBoth"  Content ="Both"   />

                
< Button  Name ="btn8"  Click ="sdFlow"  Content ="Flow"   />

            
</ StackPanel >

 

            
< StackPanel  Grid.Row ="1"  Grid.Column ="0"  Grid.ColumnSpan ="2"  Margin ="5,5,5,5"  Orientation ="Vertical" >

                
< TextBlock  Name ="txt1"  FontSize ="12"  FontWeight ="Bold"   />

                
< TextBlock  Name ="txt2"  FontSize ="12"  FontWeight ="Bold"   />

            
</ StackPanel >

 

            
< StackPanel  Grid.Row ="2"  Grid.Column ="0"  Grid.ColumnSpan ="2"  Margin ="5,5,5,5"  Orientation ="Horizontal" >

                
< Viewbox  MaxWidth ="100"  MaxHeight ="100"  Name ="vb1" >

                    
< Image  Source ="Chrysanthemum.jpg" />

                    
<!-- <Button Content="Test1"/> -->

                    
</ Viewbox >

                    
< Viewbox  MaxWidth ="200"  MaxHeight ="200"  Name ="vb2" >

                    
< Image  Source ="Chrysanthemum.jpg" />

                    
<!-- <Button Content="Test2"/> -->

                
</ Viewbox >

 

                
< Viewbox  MaxWidth ="300"  MaxHeight ="300"  Name ="vb3" >

                    
< Image  Source ="Chrysanthemum.jpg" />

                    
<!-- <Button Content="Test3"/> -->

                
</ Viewbox >

            
</ StackPanel >

 

private   void  stretchNone( object  sender, RoutedEventArgs e)

        {

            vb1.Stretch 
=  Stretch.None;

            vb2.Stretch 
=  Stretch.None;

            vb3.Stretch 
=  Stretch.None;

            txt1.Text 
=   " Stretch is now set to None. " ;

        }

 

        
// Setting the Stretch property to Fill

        
private   void  stretchFill( object  sender, RoutedEventArgs e)

        {

            vb1.Stretch 
=  Stretch.Fill;

            vb2.Stretch 
=  Stretch.Fill;

            vb3.Stretch 
=  Stretch.Fill;

            txt1.Text 
=   " Stretch is now set to Fill. " ;

        }

 

        
// Setting the Stretch property to Uniform

        
private   void  stretchUni( object  sender, RoutedEventArgs e)

        {

            vb1.Stretch 
=  Stretch.Uniform;

            vb2.Stretch 
=  Stretch.Uniform;

            vb3.Stretch 
=  Stretch.Uniform;

            txt1.Text 
=   " Stretch is now set to Uniform. " ;

        }

 

        
private   void  stretchUniFill( object  sender, RoutedEventArgs e)

        {

            vb1.Stretch 
=  Stretch.UniformToFill;

            vb2.Stretch 
=  Stretch.UniformToFill;

            vb3.Stretch 
=  Stretch.UniformToFill;

            txt1.Text 
=   " Stretch is now set to UniformToFill. " ;

        }

 

        
private   void  sdUpOnly( object  sender, RoutedEventArgs e)

        {

            vb1.StretchDirection 
=  StretchDirection.UpOnly;

            vb2.StretchDirection 
=  StretchDirection.UpOnly;

            vb3.StretchDirection 
=  StretchDirection.UpOnly;

            txt2.Text 
=   " StretchDirection is now UpOnly. " ;

        }

 

        
private   void  sdDownOnly( object  sender, RoutedEventArgs e)

        {

            vb1.StretchDirection 
=  StretchDirection.DownOnly;

            vb2.StretchDirection 
=  StretchDirection.DownOnly;

            vb3.StretchDirection 
=  StretchDirection.DownOnly;

            txt2.Text 
=   " StretchDirection is now DownOnly. " ;

        }

 

    

        
private   void  sdBoth( object  sender, RoutedEventArgs e)

        {

            vb1.StretchDirection 
=  StretchDirection.Both;

            vb2.StretchDirection 
=  StretchDirection.Both;

            vb3.StretchDirection 
=  StretchDirection.Both;

            txt2.Text 
=   " StretchDirection is now Both. " ;

        }

 

        
private   void  sdFlow( object  sender, RoutedEventArgs e)

        {

            vb1.FlowDirection 
=  System.Windows.FlowDirection.RightToLeft;

            vb2.FlowDirection 
=  System.Windows.FlowDirection.RightToLeft;

            vb3.FlowDirection 
=  System.Windows.FlowDirection.RightToLeft;

            txt2.Text 
=   " FlowDirection is RighToLeft. " ;

        }

显示效果:

 windows phone 7.1 中两个新增控件_第2张图片

windows phone 7.1 中两个新增控件_第3张图片

windows phone 7.1 中两个新增控件_第4张图片

windows phone 7.1 中两个新增控件_第5张图片

windows phone 7.1 中两个新增控件_第6张图片

 

3.       注意事项

这个控件并不是所有的属性都可用,如AllowDrop属性会引起异常。目前MSDN上的说明文档可能还是用的Silverlight的,所以会略有出入。

另外RichTextBox这一版中无法实现图文混排,要等到下一个版本了。以下是我在微软官方论坛提问得到的答案。

windows phone 7.1 中两个新增控件_第7张图片

 

 

 

示例代码:http://www.52winphone.com/bbs/viewthread.php?tid=743&extra=page%3D1s

你可能感兴趣的:(windows,phone)