现在的位置: 首页 > 综合 > 正文

Silverlight之控件应用总结(二)(4)

2012年11月15日 ⁄ 综合 ⁄ 共 11730字 ⁄ 字号 评论关闭

接着上篇继续

1.1.       Label

 <sdk:Label Height="28" HorizontalAlignment="Left"
Margin
="122,46,0,0" Name="label1"VerticalAlignment="Top" Width="120"
/>

 

1.2.       ListBox

前台代码:

 

       <!--SelectionMode属性确定用户一次可以选择多少个项。可以将此属性设置为 Single(默认值)、MultipleExtended。下表描述了这些枚举值的行为。

Single

 用户一次只能选择一项。

Multiple

 用户可以选择多个项而无需按下修改键。

Extended

 用户可以按下 Shift键来选择多个连续项,或按下 Ctrl键并单击项来选择多个不连续的项。-->

 

 <ListBox Height="278" ItemsSource="{Binding}" HorizontalAlignment="Left"
Margin
="116,130,0,0" Name="listBox1"VerticalAlignment="Top" Width="328"
SelectionChanged
="listBox1_SelectionChanged">

          </ListBox>

 

后台代码:

 public ListBoxP()

        {

           InitializeComponent();

            List<string> lst =new
List<string>();

            for (int i = 0; i< 100; i++)

            {

               lst.Add("张三" + i.ToString());

            }

            this.listBox1.ItemsSource = lst;

 

        }

 

     

        private
void
listBox1_SelectionChanged(object sender,SelectionChangedEventArgs e)

        {

            MessageBox.Show(this.listBox1.SelectedItem.ToString());

        }

 

1.3.       MediaElement

前台代码:

<MediaElement Source="Media/九阴真经.wmv"
AutoPlay
="True"  Height="244" HorizontalAlignment="Left" Margin="109,45,0,0"
Name
="mediaElement1"VerticalAlignment="Top" Width="420" />

 

后台代码:

                // MediaElement.Play() -播放视频

                // MediaElement.Pause() -暂停视频

                // MediaElement.Stop() -停止视频

                // MediaElement.IsMuted -是否静音

                // MediaElement.Volume -声音大小(0 - 1

 

1.4.       MultiScaleImage

1.5.       OpenFileDialog

后台代码:

   OpenFileDialogo =new
OpenFileDialog();

            o.Multiselect = true;

            o.Filter = "文本文件|*.txt|所有文件|*.*";

            o.ShowDialog();

 

1.6.       Page

1.7.       PasswordBox

 <PasswordBox  Password="123"PasswordChar="*"  Height="23"HorizontalAlignment="Left"
Margin="140,157,0,0" Name="passwordBox1"VerticalAlignment="Top" Width="120" />

 

1.8.       Popup

       
//HtmlPopupWindowOptions -
需要弹出的新窗口的参数(如果浏览器是以标签的形式打开新窗口,则此参数无效)

            HtmlPopupWindowOptions opt =new
HtmlPopupWindowOptions();

           opt.Left = 0;

            opt.Top= 0;

           opt.Width = 320;

           opt.Height = 240;

 

            // HtmlPage.IsPopupWindowAllowed -指定Silverlight
宿主是否可以使用 HtmlPage.PopupWindow()来弹出新的浏览器窗口

            // HtmlPage.PopupWindow() -弹出新窗口

            if (true ==HtmlPage.IsPopupWindowAllowed)

               HtmlPage.PopupWindow(newUri("http://www.baidu.com/",UriKind.Absolute),
"newWindow",opt);

 

1.9.       ProgressBar

前台代码:

<ProgressBar Height="24" HorizontalAlignment="Left"
Margin
="134,225,0,0" Name="progressBar1" VerticalAlignment="Top" Width="314"/>

 

后台代码:   

this.progressBar1.Maximum= 10000;

            this.progressBar1.Minimum = 0;

         

            for (int i = 0; i< 10000; i++)

            {

               this.progressBar1.Value += i;

            }

 

1.10.    RadioButton

前台代码:

      <RadioButton Content=""
Height
="16" IsChecked="True" HorizontalAlignment="Left" Margin="136,82,0,0"
Name
="radioButton1" VerticalAlignment="Top" />

        <RadioButton Content=""
Height
="16" HorizontalAlignment="Left" Margin="136,104,0,0" Name="radioButton2"
VerticalAlignment
="Top" />

 

1.11.    RepeatButton

类似Button

1.12.    RichTextBox

前台代码:

<RichTextBox HorizontalAlignment="Left" DataContext="123"
Margin
="222,47,0,0" Name="richTextBox1" VerticalAlignment="Top" Height="114"
Width
="250" />

后台代码:

Silverlight4版本中,RichTextBox这个控件算是很受期待的控件了,希望通过这篇文章让你对该控件有所了解。

Sl中,有TextBoxTextBlockRichTextBox3个核心的文本控件,从表面上看,RichTextBox看起来和一个普通的TextBox并没有太多的区别,实际上它提供了诸如格式化文本,段落,超链接,内联图像这些功能,它甚至可以显示任何UIElement,比如DataGrid

MSDN有关于RichTextBox内容模型的一个关系图

RichTextBox的内容属性是Blocks,这是一个Paragraph的集合,这些Paragraph可以包含Inline元素派生的元素。比如Run

SpanBoldItalicHyperlinkInlineUIContainer,其实从图中你可能会注意到Hyperlink比较特殊,它不能包含其它Inline类型的元素。

下面熟悉RichTextBox中一些简单的属性:

添加RichTextBox

1.       <RichTextBox AcceptsReturn="True"x:Name="rbtMyRichTextBox">

<RichTextBoxAcceptsReturn="True" x:Name="rbtMyRichTextBox">

RichTextBox常用的属性包括AcceptReturnIsReadOnly属性,只有在只读模式下,UI元素才是可用的。

添加元素:前面已经提到,RichTextBox包含了Paragraph集合,所以我们可以轻易添加任何内联元素,那么这里我们看一看在一个Paragraph中添加多个元素的Code

1.       Paragraph prgParagraph =newParagraph();

2.       Run rnMyText =new
Run();

3.       rnMyText.Text ="Thisis some example text with a ";

4.       prgParagraph.Inlines.Add(rnMyText);

5.       Hyperlink lnkSSLink =newHyperlink();

6.       lnkSSLink.Inlines.Add("linkto Silverlight
Show"
);

7.       lnkSSLink.NavigateUri =new
Uri(
"http://www.baidu.com");

8.       prgParagraph.Inlines.Add(lnkSSLink);

9.       rbtMyRichTextBox.Blocks.Add(prgParagraph);

ParagraphprgParagraph = new Paragraph();

Run rnMyText = newRun();

rnMyText.Text ="This is some example text with a ";

prgParagraph.Inlines.Add(rnMyText);

Hyperlink lnkSSLink= new Hyperlink();

lnkSSLink.Inlines.Add("linkto Silverlight Show");

lnkSSLink.NavigateUri= new Uri("http://www.mrtcode.com");

prgParagraph.Inlines.Add(lnkSSLink);

rbtMyRichTextBox.Blocks.Add(prgParagraph);

上面的代码中,添加了一些文本和一个超链接,那么首先要做的是实例化一个Paragraph,在这个Paragraph中,我们添加了文本和超链接,这些对象被添加到该Paragraph中的Inlines集合中,最后将这个Paragraph添加到了RichTextBox

格式文本对象:Run元素只能包含非格式化的文本,如果想要对文本进行格式化,那么可以采用变通的方式,即将Run元素包含在内联的格式元素中

1.       Paragraph prgParagraph =newParagraph();

2.       Bold bldText =new
Bold();

3.       bldText.Inlines.Add(new
Run() {Text =
"This is some example text in bold" });

4.       Italic itlText =new
Italic();

5.       itlText.Inlines.Add(new
Run() {Text =
"This is some example text in italics" });

6.       Underline unText =newUnderline();

7.       unText.Inlines.Add(new
Run() {Text =
"This is some example text, underlined" });

8.       Bold bldTextWithItalic =new
Bold();

9.       bldTextWithItalic.Inlines.Add(new
Italic(){ Inlines = {
new Run(){Text ="This is some example text, bold and italic" } } });

10.    prgParagraph.Inlines.Add(bldText);

11.    prgParagraph.Inlines.Add(newLineBreak());

12.    prgParagraph.Inlines.Add(itlText);

13.    prgParagraph.Inlines.Add(newLineBreak());

14.    prgParagraph.Inlines.Add(unText);

15.    prgParagraph.Inlines.Add(newLineBreak());

16.    prgParagraph.Inlines.Add(bldTextWithItalic);

17.    rbtMyRichTextBox.Blocks.Add(prgParagraph);

ParagraphprgParagraph = new Paragraph();

Bold bldText = newBold();

bldText.Inlines.Add(newRun() { Text = "This is some example text in bold" });

Italic itlText =new Italic();

itlText.Inlines.Add(newRun() { Text = "This is some example text in italics" });

Underline unText =new Underline();

unText.Inlines.Add(newRun() { Text = "This is some example text, underlined" });

BoldbldTextWithItalic = new Bold();

bldTextWithItalic.Inlines.Add(newItalic() { Inlines = { new Run(){ Text = "This is some example text, boldand italic" } } });

prgParagraph.Inlines.Add(bldText);

prgParagraph.Inlines.Add(newLineBreak());

prgParagraph.Inlines.Add(itlText);

prgParagraph.Inlines.Add(newLineBreak());

prgParagraph.Inlines.Add(unText);

prgParagraph.Inlines.Add(newLineBreak());

prgParagraph.Inlines.Add(bldTextWithItalic);

rbtMyRichTextBox.Blocks.Add(prgParagraph);

上面的代码分别实现了文本的加粗,倾斜,下滑线功能,和添加元素的代码没有太大区别。

添加InlineUIContainer顾名思义,这个元素就是UI元素的容器,当我们想要在内容中添加ImageDataGrid这些元素的时候,它非常的方便,步骤也是和其它内联元素一样的。先创建一个InlineUIContainer,然后在容器中添加UIElement,把这个容器添加到Paragraph

1.       InlineUIContainer iuicContainer =newInlineUIContainer();

2.       DataGrid dtgGrid =newDataGrid();

3.       dtgGrid.AutoGenerateColumns =true;

4.       dtgGrid.Width = 400;

5.       dtgGrid.Height = 200;

6.       dtgGrid.ItemsSource = ...

7.       iuicContainer.Child = dtgGrid;

8.       Paragraph prgParagraph =newParagraph();

9.       prgParagraph.Inlines.Add(iuicContainer);

10.    rbtMyRichTextBox.Blocks.Add(prgParagraph);

InlineUIContaineriuicContainer = new InlineUIContainer();

DataGrid dtgGrid =new DataGrid();

dtgGrid.AutoGenerateColumns= true;

dtgGrid.Width =400;

dtgGrid.Height =200;

dtgGrid.ItemsSource= ...

iuicContainer.Child= dtgGrid;

ParagraphprgParagraph = new Paragraph();

prgParagraph.Inlines.Add(iuicContainer);

rbtMyRichTextBox.Blocks.Add(prgParagraph);

上面的CODE如果改成XAML声明:

1.       <RichTextBox AcceptsReturn="True"

2.       Margin="5"

3.       x:Name="rbtMyRichTextBox">

4.       <Paragraph>

5.       <InlineUIContainer>

6.       <Image Source="Assets/logo.png"
Width=
"100"></Image>

7.       </InlineUIContainer>

8.       </Paragraph>

9.       </RichTextBox>

<RichTextBoxAcceptsReturn="True"

             Margin="5"

            x:Name="rbtMyRichTextBox">

          <Paragraph>

           <InlineUIContainer>

             <ImageSource="Assets/logo.png" Width="100"></Image>

           </InlineUIContainer>

         </Paragraph>

</RichTextBox>

通过上面的内容已经对RichTextBox有了基本的了解,其实之前我们都是通过编程的方式加入这些元素,但是更为常见的场景是用户可以通过选择某些文本,并对选中的文本进行加粗等操作,RichTextBox提供了一个类型为TextSelectionSelection属性,它包含了当前被选择的文本,然后我们可以通过GetPropertyValueApplyPropertyValue方法对选择的文本进行操作。

操作Selection

1.       if(rbtMyRichTextBox !=null&&
rbtMyRichTextBox.Selection.Text.Length > 0)

2.       {

3.       if (rbtMyRichTextBox.Selection.GetPropertyValue(Run.FontWeightProperty)is
FontWeight

4.       &&((FontWeight)rbtMyRichTextBox.Selection.GetPropertyValue(Run.FontWeightProperty))==
FontWeights.Normal)

5.       {

6.       rbtMyRichTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty,FontWeights.Bold);

7.       }

8.       else

9.       {

10.    rbtMyRichTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty,FontWeights.Normal);

11.    }

12.    }

13.    if(rbtMyRichTextBox !=null)

14.    {

15.    rbtMyRichTextBox.Focus();

16.    }

if (rbtMyRichTextBox !=null && rbtMyRichTextBox.Selection.Text.Length > 0)

{

    if(rbtMyRichTextBox.Selection.GetPropertyValue(Run.FontWeightProperty) isFontWeight

            &&((FontWeight)rbtMyRichTextBox.Selection.GetPropertyValue(Run.FontWeightProperty))== FontWeights.Normal)

    {

            rbtMyRichTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty,FontWeights.Bold);

     }

    else

    {

           rbtMyRichTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty,FontWeights.Normal);

     }

}

 if (rbtMyRichTextBox != null)

    {

         rbtMyRichTextBox.Focus();

     }

上面的代码中,我们获取了选中文本的FontWeight属性,通过检查它是Normal还是Bold改变其值,这里的逻辑也可以用在
FontSize
等其它的属性上。

简单的复制,剪切,粘贴功能:Sl4支持Clipboard功能,所以通过访问Clipboard我们可以很容易实现剪切,复制功能。

1.       privatevoidCopy_Click(object
sender, RoutedEventArgs e)

2.       {

3.       Clipboard.SetText(rbtMyRichTextBox.Selection.Text);

4.       rbtMyRichTextBox.Focus();

5.       }

6.       privatevoidCut_Click(object
sender, RoutedEventArgs e)

7.       {

8.       Clipboard.SetText(rbtMyRichTextBox.Selection.Text);

9.       rbtMyRichTextBox.Selection.Text ="";

10.    rbtMyRichTextBox.Focus();

11.    }

12.    //上面的代码分别演示如何对RichTextBox中被选中的文本进行复制,剪切

13.    privatevoidPaste_Click(object
sender, RoutedEventArgs e)

14.    {

15.    rbtMyRichTextBox.Selection.Text =Clipboard.GetText();

16.    rbtMyRichTextBox.Focus();

17.    }

private voidCopy_Click(object sender, RoutedEventArgs e)

{

        Clipboard.SetText(rbtMyRichTextBox.Selection.Text);  

         rbtMyRichTextBox.Focus();

}

private voidCut_Click(object sender, RoutedEventArgs e)

{

     Clipboard.SetText(rbtMyRichTextBox.Selection.Text);

     rbtMyRichTextBox.Selection.Text ="";

     rbtMyRichTextBox.Focus();

}      

//上面的代码分别演示如何对RichTextBox中被选中的文本进行复制,剪切       

private voidPaste_Click(object sender, RoutedEventArgs e)

{

    rbtMyRichTextBox.Selection.Text = Clipboard.GetText();

    rbtMyRichTextBox.Focus();

}

复制的时候,如果RichTextBox没有选择任何元素,那么剪切板上的文本将显示在鼠标的当前位置上。注意的是,Cilpboard只能保护简单的文本,所以当粘贴,复制的时候会丢失之前格式化的信息。

保存内容为文件:RichTextBox提供了一个名为Xaml的属性,通过这个属性可以很方便的将内容保存为文件。

1.       privatevoidSave_Click(object
sender, RoutedEventArgs e)

2.       {

3.       var uiElements = from blockinrbtMyRichTextBox.Blocks

4.       from inlinein
(block
asParagraph).Inlines

5.       where inline.GetType() ==typeof(InlineUIContainer)

6.       select inline;

7.       if(uiElements.Count() != 0)

8.       {

9.       MessageBox.Show("UIElementscannot be saved");

10.    return;

11.    }

12.    SaveFileDialog sfdSaveXaml =newSaveFileDialog();

13.    sfdSaveXaml.DefaultExt =".sav";

14.    sfdSaveXaml.Filter ="Savedrtb files|*.rtb";

15.    if(sfdSaveXaml.ShowDialog().Value)

16.    {

17.    using (FileStreamfs = (FileStream)sfdSaveXaml.OpenFile())

18.    {

19.    System.Text.UTF8Encoding enc =newSystem.Text.UTF8Encoding();

20.    byte[] buffer= enc.GetBytes(rbtMyRichTextBox.Xaml);

21.    fs.Write(buffer, 0, buffer.Length);

22.    fs.Close();

23.    }

24.    }

25.    }

private voidSave_Click(object sender, RoutedEventArgs e)

{

抱歉!评论已关闭.