WPF 进阶 菜单工具栏状态栏
2.工具栏和状态栏
在Windows窗体中,工具栏和状态栏有各自的内容模型。尽管也能使用封装器在工具栏和
状态栏中随意放置控件,但这个过程并非完美无缺。WPF中的工具栏和状态栏没有这一限制。
它们支持WPF内容模型,从而可为工具栏和状态栏添加任何元素,得到无可比拟的灵活性。实
际上,没有特定于工具栏的元素,也没有特定于状态栏的元素。需要的所有内容就是WPF基本元
素的集合。
2.1 ToolBar控件
典型的ToolBar控件充满了Button、ComboBox、CheckBox、RadioButton以及Separator对
象。因为这些元素都是内容控件(Separator元素除外),所以可在它们内部放置文本和图像。尽管
可使用其他元素(如Label对象和lmage对象)在TooIBar控件中放置不能交互的元素,但这常令
人感到困感。
现在,您可能会好奇如何在工具栏中放置这些通用控件而不会创建奇怪的可视化外观。毕
竟,在标准的Windows工具栏中显示的内容,看起来和在窗口中显示的类似内容有很大的不同。
例如,工具栏中的按钮使用扁平的、流线型的外观显示,删除了边框和具有阴影的背景。工具
栏表面能够穿透显示,并且当将鼠标悬停在按钮上时会发出蓝色的辉光。
在WPF中,工具栏中的按钮和窗口中的按钮是相同的一一它们都是可用于执行操作的能够
被单击的区域。唯一的区别是可视化外观。因此,完美的解决方法是使用己有的Button类,但
是需要调整各种属性或者改变控件模板。这正是ToolBar类采取的方法一一覆盖某些子元素类
型的默认样式,包括按钮。如果希望创建自定义的工具栏按钮,还可以手动设置Button.Style
属性,但通常通过设置按钮内容得到需要的所有控制能力。
ToolBar控件不但改变了它所包含的许多控件的外观,还改变了ToggleButton控件以及继承
自ToggleButton的CheckBox和RadioButton的行为。在TooIBar控件中呈现的ToggleButton或
CheckBox看来起像普通按钮,但当单击时,按钮会保持突出显示(直到再次单击)。RadioButton
具有类似的外观,但为了清除突出显示,必须单击同一组中的另一个RadioButton(为防止混乱,
最好总在工具栏中使用Separator对象将一组Rad10Button对象隔开)。
为演示工具栏的用法,分析下面的简单标记:
<ToolBar> <Button Content="{StaticResource DownloadFile}"></Button> <Separator></Separator> <Button>Open</Button> <Button>Save</Button> <Button>Close</Button> <Separator></Separator> <CheckBox FontWeight="Bold">Bold</CheckBox> <CheckBox FontStyle="Italic">Italic</CheckBox> <CheckBox> <TextBlock TextDecorations="Underline">Underline</TextBlock> </CheckBox> <Separator></Separator> <ComboBox SelectedIndex="0"> <ComboBoxItem>100%</ComboBoxItem> <ComboBoxItem>50%</ComboBoxItem> <ComboBoxItem>25%</ComboBoxItem> </ComboBox> </ToolBar> </Grid>
尽管图显示的示例限制按钮只包含文本,但Too旧ar控件中的按钮通常包含图像内容
(还可通过在水平StackPaneI面板中封装lmage元素和TextBIock或Label元素来组合文本和图
像)。如果使用图像内容,那么需要确定是希望使用位图图像(对于不同的分辨率,可能导致缩
放问题)、图标(能在一定程度上改善这种状况,因为可在文件中提供几个具有不同尺寸的图像)
还是希望使用矢量图像(需要大量标记,但能合理地改变大小)。
TooIBar控件有一些奇特之处。首先,和其他继承自ItemsControI类的控件不同,它没有提
供专门的封装器类(换句话说,没有ToolBarItem类)。ToolBar控件并不像其他列表控件那样需
要这样的封装器来管理项和跟踪选择等。TooIBar控件的另一个奇特之处是它继承自Headered-
ItemsControl类,尽管Header属性不起作用,但可通过一些有趣的方式使用这个属性。例如,
如果具有使用几个TooIBar对象的界面,可允许用户从上下文菜单中选择使用哪个TooIBar对
象。在这个菜单中,可使用在Header属性中设置的工具栏名称。
ToolBar控件还有一个更有趣的属性:Orientation。可通过将ToolBar.Orientation属性设置
为Vertical,从而创建停靠到窗口侧边的竖向工具栏。然而,除非使用LayoutTransform旋转元
素,否则工具栏中的每个元素仍是水平方向(例如,文本不会侧转)。

浙公网安备 33010602011771号