27
Bob说,某些时候,我们还是需要用绝对位置的,比如,数学公式、乐谱计算等软件。因此,我们需要画板控件(Canvas)。
先从最简单的直线开始:
<Line X1="10" X2="200" Y1="10" Y2="10" Stroke="Black" Fill="Black" StrokeThickness="5" StrokeEndLineCap="Triangle" />
X1,Y1是起点XY坐标;X2,Y2是重点XY坐标。Stroke是描边颜色,Fill是填充颜色,StrokeThickness是描边厚度,StrokeEndLineCap是结束的画笔类型,这里选三角形就是结尾有个小尖尖头。
(对了,直线直接可以在程序中使用)
Bob在之后演示了用直线画出三角形,这里不再赘述。
接下来是折线:
<Polyline Canvas.Left="150"
Canvas.Top="0"
Stroke="Black"
StrokeThickness="5"
Fill="Red"
Points="50,25 0,100 100,100 50,25" StrokeLineJoin="Round" StrokeStartLineCap="Round" StrokeEndLineCap="Round" />
▲Points,就是折线经过的四个点。
最后要提到的是Z轴的问题。虽然显示器是2D的,但不妨想象一下,用投影画出的样子。对,这就产生了Z轴。Zindex就是这样的一类属性。比如——
<Rectangle Canvas.Top="200" Canvas.Left="0" Height="50" Width="100" Fill="Yellow" Canvas.ZIndex="100" />
<Ellipse Stroke="Blue" Width="50" Height="100" Canvas.Left="10" Canvas.Top="200" StrokeThickness="10" Canvas.ZIndex="15" />
这样显示出来,就是一个正方形盖住“0”的上部的图案。
28
先设想一种情况,你在开发一个庞大的项目,要用到一堆相似的主题。这时,在现有的知识水平下,你只能一个一个的复制——粘贴、复制——粘贴,万一哪个地方出了错,还要重新来过。
这里,为了解决这种问题,我们就要引入新的语法了——Resources
先在页面(Page)里面实现一下:
<Page.Resources>
<SolidColorBrush x:Key="Mybrush" Color="Brown"></SolidColorBrush>
<x:String x:Key="hello">我是用我自己的方式守护我心爱的网站!</x:String></Page.Resources>
要使用的话,就这么操作:
TextBlock Foreground="{StaticResource Brush}" Text="{StaticResource hello}"></TextBlock>
可以看见,所谓Key就是名字、而要使用的话,就加上这个名字、以及大括号就可以了。
问题来了,如果是Button呢?
我们有一个“豪华版”:
<Style TargetType="Button" x:Key="BU_st">
<Setter Property="FontFamily" Value="微软雅黑"></Setter>
<Setter Property="FontSize" Value="36"></Setter>
<Setter Property="Background" Value="AliceBlue"></Setter>
</Style>
如果要跨Page使用该怎么办呢?
这也有办法:
在App.xaml中添加:
<Application.Resources>
<SolidColorBrush x:Key="Mybrush" Color="Brown"></SolidColorBrush>
<x:String x:Key="hello">我是用我自己的方式守护我心爱的网站!</x:String></Application.Resources>
其他使用的方法不变。
那么,如果要在应用外使用呢?我们可以使用(或者加载)资源字典(Resource Dictionary),然后在Page.Resources中创建集合:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml"></ResourceDictionary>
<ResourceDictionary Source="Dictionary2.xaml"></ResourceDictionary><!--这是在不只一个的时候使用的语句-->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
29
前面讲的StaticResource是静态的,只在程序运行初次被绑定,这里,我们如果要获取用户设置的主题色的话,就要用另外一种方法了:
{ThemeResource SystemAccentColor}
也就是说,要设置颜色,就在Fill=""中,把他填上去就可以了。
像这样:
<Rectangle Height="100" Width="50" Fill="{ThemeResource SystemAccentColor}"></Rectangle>
<Rectangle Height="50" Width="50" Fill="{ThemeResource SystemColorWindowColor}"></Rectangle>
<TextBlock Text="标题" Style="{StaticResource HeaderTextBlockStyle}"></TextBlock>
<!--这里是字体-->
还有一点,我们可以自己设置亮色/暗色主题,不受用户设置的干扰:
在App.xaml加入以下属性:
RequestedTheme="Light"
还有啊,无论怎样,高对比度的设置永远是最高优先级的,要为残疾人士考虑嘛。