
Textblock xaml檔案和隐藏檔案
在設計界面的時候我們可以通過xaml中進行設計,這種設計是所見即所得的,很是友善,由于xaml中使用到的元素都是其實質都是類檔案,比如textblock類,textblock在xaml檔案中展示的特性都是該類的屬性及方法;是以我們也可以在隐藏檔案完成對可視化元素的建構,例如我們實作如下的效果:
那麼我們在MainPage.xaml 部分檔案代碼如下:
<!--ContentPanel - 在此處放置其他内容-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock x:Name="txtName" Text="Name" VerticalAlignment="Center" HorizontalAlignment="Center" ></TextBlock>
</Grid>
同樣的效果我們可以在MainPage隐藏檔案進行編寫如下:
View Code //PhoneApplicationPage加載時
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
//和xaml中顯示的位置相同
TextBlock txtblk = new TextBlock();
txtblk.Name = "txtName";
txtblk.Text = "Name";
txtblk.VerticalAlignment = VerticalAlignment.Center;
txtblk.HorizontalAlignment = HorizontalAlignment.Center;
ContentPanel.Children.Add(txtblk);
}
此事件需要在xaml檔案PhoneApplicationPage類中添加loaded事件,此外我們還會發現我們利用了名為ContentPanel的Grid元素的Children屬性将textblock加入到Grid内部,其實Grid是将textblock添加到自身的Children集合中;
屬性的繼承性
屬性的繼承是silverlight的一個特性,它可以将PhoneAppplicationPage中的一些屬性(大緻就是Forground屬性,以及和字型相關的 屬性,如FontFamily,Fronsize,FronStyle,FrontWeight,fronStretch)繼承到 MainPage中,在下面的案例中使用的是在PhoneAppplicationPage中設定屬性
FontStyle="Italic"
我們會看到這樣的效果:
我們可以看到,在MainPage中的所有字型都變為斜體字,下面在顯示為“Name”的textblock元素改為:
<TextBlock x:Name="txtName" FontStyle="Normal" Text="Name" VerticalAlignment="Center" HorizontalAlignment="Center" ></TextBlock>
再看效果變為如下:
是以從中可以總結屬性的優先級:①本地設定的優先級最高;②繼承來的屬性優先級居中;③預設的最低
屬性元素文法
元素及其屬性的不同書寫方式,比如上面我們實作顯示"Name"的textblock元素,在xaml中可以有一下不同的幾種書寫格式:
最原始的寫法①:
寫法②:
<TextBlock>
<TextBlock.Name>txtName</TextBlock.Name>
<TextBlock.Text>Name</TextBlock.Text>
<TextBlock.FontStyle>Normal</TextBlock.FontStyle>
<TextBlock.VerticalAlignment>Center</TextBlock.VerticalAlignment>
<TextBlock.HorizontalAlignment>Center</TextBlock.HorizontalAlignment>
</TextBlock>
兩種寫法實作的效果一直,可以看出寫法②更有層次感,但是這樣寫法比較累贅,适當的時候可以采用第二種寫法;其中第二種寫法中的Name,Text,FontStyle,VerticalAlignment,HorizontalAlignmen稱之為屬性元素,即用xml元素表示一個.NET屬性,另外需要注意的是屬性元素标簽内不能含有其他任何東西;
顔色和畫刷
我們把名為txtName的元素添加屬性Foreground更改為
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock x:Name="txtName" FontStyle="Normal" Text="Name"
VerticalAlignment="Center" HorizontalAlignment="Center"
Foreground="#FF0000"
></TextBlock>
可以看到效果:
這裡使用的是紅綠藍的字元串表示的顔色,每種顔色值都是範圍從00到FF占用一個位元組的16進制數,其中00表示全透明,FF表示不透明;對于scRGB色彩空間,其值設定在0到1之間,我們可以這樣定義
<TextBlock x:Name="txtName" FontStyle="Normal" Text="Name"
Foreground="sc#0.1,0.2,0.3"
效果:
按照上面的屬性元素文法我們可以這樣寫:
<TextBlock.Foreground>
<SolidColorBrush>
<Color>sc#0.1,0.2,0.3</Color>
</SolidColorBrush>
</TextBlock.Foreground>
另外Foreground屬性是可以通過可視化樹繼承,但是Background屬性不可繼承的,Background屬性預設為null,null與Background屬性設定為透明Transparent相同;
<a href="http://shenzhoulong.blog.51cto.com/attachment/201204/1191789_1334484120.rar" target="_blank">源碼</a>