想在Win上自己寫點小工具用,GUI自然是免不了的,於是決定學一學WPF,直接拖控件是很方便啊。控件拖出來以后發現運行時改變窗口大小控件不會重繪,搜索了一下發現了解決辦法:使用Viewbox控件。
Viewbox控件的功能是"Defines a content decorator that can stretch and scale a single child to fill the available space",即Viewbox只能有一個子元素,並且會拉伸/縮放這個子元素使其填滿可用的空間。通常可將需要變動大小的控件放在一個Canvas或Grid或其他類型的控件中,再將這個控件放入Viewbox內,例如:
1 <Viewbox> 2 <Grid> 3 <DatePicker x:Name="DateSelector" HorizontalAlignment="Stretch" Margin="10,10,165,222" VerticalAlignment="Stretch"/> 4 <TextBox x:Name="Content" HorizontalAlignment="Stretch" Margin="10,43" TextWrapping="Wrap" Text="input" VerticalAlignment="Stretch"/> 5 <Button x:Name="Add" Content="Add" HorizontalAlignment="Stretch" Margin="197,228,10,10" VerticalAlignment="Stretch" Width="75" Click="Add_Click"/> 6 </Grid> 7 </Viewbox>
Viewbox中的子控件需要將HorizontalAligment和VerticalAlignment屬性(如果不在Canvas中)設為Stretch,這兩個屬性分別表示子控件在父控件中組合時的水平和豎直對齊特征。Canvas基於絕對定位布局,所以該屬性沒有作用。
Viewbox可更改Stretch屬性選擇子元素如何放入Viewbox的可用空間,Stretch的枚舉如下:
Fill:調整內容的大小以填充目標尺寸,不保留縱橫比;
None:內容保持其原始大小;
Uniform:在保留內容原有縱橫比的同時調整內容的大小,以適合目標尺寸。Viewbox中的Stretch屬性值默認為Uniform;
UniformToFill:在保留內容原有縱橫比的同時調整內容的大小,以填充目標尺寸。 如果目標矩形的縱橫比不同於源矩形的縱橫比,則對源內容進行剪裁以適合目標尺寸;