控件

  内容控件

Content                                                                                                                                                                     

  内容控件只允许包含一项简单控件。就是说在设置内容控件的Content属性时只能设置一项,否则将出现以下错误。

  如果我们需要同时为Content属性添加多个项,可以使用容器把这些项包含起来。

例如我想在一个Label控件的Content属性中添加一句文本跟一张图片。

Content包含容器
1  <Label Target="{Binding ElementName=userNameBox}" Height="28" HorizontalAlignment="Left" Margin="12,43,0,0" Name="Label1" VerticalAlignment="Top" Width="120">
2                 <StackPanel >
3                     <Label Background="Black" FontWeight="Bold" Foreground="White">百度网站Logo</Label>
4                     <Image Source="http://www.baidu.com/img/baidu_logo.gif" Width="400" Height="300"></Image>
5                 </StackPanel>   
6 </Label>

 

 HasContent                                                                                                                                                                

  它是一个布尔类型的属性,但Content为空时为False否则为True。他通常结合属性触发器使用,利用它的变化来设置其他的值。

 

书中说WPF中自带的内容控件有3大类。(同时提到Windows其实也是一种内容控件,在以后会了解到)

 1.按钮
 2.简单容器
 3.带有头部(Header)的容器

 

 按钮在我们通常的理解中就是一个可以被点击、或者在按钮获得焦点时点击键盘回车键等按键操作的内容控件,在WPF中ButtonBase类定义了按钮的属性跟方法。
  直接继承ButtonBase类得到的控件有:
  *Button

     在ButtonBase的基础上添加了两个简单的属性isCancel跟IsDefault,isDefault为true时,这个按钮在默认情况下,此按钮获得焦点。isCancel书上说对于对话框来说是一种捷径,当按钮的isCancel为True时,点击按钮,对话框会自动关闭。这个我想不通,如果我没有设置isCancel属性,我直接在click事件中编写关闭对话框的逻辑就行了,可能在后面的学习中会慢慢明白吧。

 

   *RepeatButton
  在默认的工作箱(vs2008左边的工具箱)中没出现的,需要自己在Xaml代码中输入。
  外观上与button的外观一样,继承自ButtonBase
  它主要的功能是当鼠标按键不松开,根据Delay与Interval属性(单位均为毫秒)来运行Click事件。

 例如
xaml代码                                                                                       
...
<TextBox Height="23" name="txt">1</TextBox>
<RepeatButton Name="repbtn_add" Delay="1000" Interval="100" Width="34">+</RepeatButton>
<RepeatButton Name="repbtn_cut" Delay="1000" Interval="100" Width="34">-</RepeatButton>
...
                                                                                                

逻辑代码                                                                           
  Private Sub rebtn_up_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles rebtn_up.Click
        Me.TextBox1.Text += 1

    End Sub

    Private Sub rebtn_down_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles rebtn_down.Click
        Me.TextBox1.Text -= 1

    End Sub
                                                                                                
当鼠标点击 “+”按钮时,运行一次repbtn_add的click事件一次,如果鼠标不疏开,1秒钟之后就会按照每秒10次的频率运行repbtn_add的click事件。感觉TextBox的跳动频率
 
   从上面的例子可以知道RepeatButton的Delay属性控制鼠标点击后多么秒后按照Interval的频率运行click事件。

 

  *ToggleButton & CheckBox & RadioButton
  此类按钮是一种在点击是可以保留其状态的按钮,他们有3中状态,分别是选中(checked)、不确定(indeterminate)、未选中(unchecked)。跟传统的winform控件大同小异。 在RadioButton中用自定义方法(GroupName)来对选项进行分组,类型为字符串。

 

 

  简单容器

 *label
  label这个经典的控件跟以前一样,他的主要作用就是显示一些文字。在WPF中我们可以向Content属性中放入任何内容(Button、iamge等)。我们还可以设计Label显示文字的方式跟样式。

  在WPF中Label多了一个独特的特性,在winform中此特性我自己知道的就只存在于Menu菜单中。他就是访问键(access key),在一个字母钱增加一条下划线可以指派某个字母作为访问键.

<label>_label</label>

 

  当用户按下Alt+L时,控件将获得焦点。

 

 *ToolTip

 它效果就是将需要展示的内容放在一个浮动框中,鼠标悬停到那个设置了tooltip属性的控件上,浮动框就会显示出来。同样它的Content可以包含任何的内容。
  这里有一个地方需要注意:ToolTip类绝对不能被直接放在UI元素树中,他必须被赋值给另一个元素的ToolTip属性。也就是说不能直接定义一个Tooltip,他是作为一个控件的Tooltip属性而存在。

例如 作为一个Button按钮的Tooltip属性的子元素。

<Button>
OK
<Button.ToolTip>
<ToolTip>
这是Button的Tooltip
</toolTip>
</Button.ToolTip>
</Buton>

 

 

  *Frame

  按照书上说的可以把它作为一个功能强大的“Microsoft Web Browser”ActiveX控件 或者 Microsoft Forms WebBrowser控件。因为此控件的一个重要属性Source是System.Uri类型,也就是说,此控件时用来显示网页的。
  要想设置它的Content属性必须显示地设置,不能直接在开始标签更结束标签中隐式定义。因为在Xaml中,不把Content作为Frame的一个属性。他的优先级比Source高。

 

 带有头部的容器

 在Winform中此类带有头部的容器有GroupBox(还有没有我就不清楚了),同样WPF也有他的存在,但在WPF中有一个控件基于他的基础上有了改进,成为WPF特有的控件--Expander
            

           折叠                                 展开

 

Expander
 <Expander Header="Logo" Margin="0,12,11,18" Name="Expander1" ContentStringFormat="" HorizontalAlignment="Right" Width="120">
            
<StackPanel >
                
<Image Source="http://www.baidu.com/img/baidu_logo.gif"></Image>
                
<Image Source="http://www.baidu.com/img/baidu_logo.gif"></Image>
                
<Image Source="http://www.baidu.com/img/baidu_logo.gif"></Image>
            
</StackPanel>    
</Expander>

 

 

同样想在Expander中显示多个项就必须用一个容器把这些项装起来作为一个大项添加到Expander的Content的属性中。

 

 

 

--------------------------------------------------

  跟师兄出去饱吃了一顿,湘菜,第一次吃啊。好辣,如果不是很饿的话,可能真的吃不下了。
 一开始的时候痛苦啊,吃着吃着就习惯了,原来传说中的水煮鱼是这个味道的,不错,很香。

博客N久没写咯,加油。一步一个脚印慢慢来。

posted @ 2009-12-11 21:00  尐傑.net  阅读(371)  评论(0编辑  收藏  举报