想在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内,例如:
<Viewbox>
<Grid>
<DatePicker x:Name="DateSelector" HorizontalAlignment="Stretch" Margin="10,10,165,222" VerticalAlignment="Stretch"/>
<TextBox x:Name="Content" HorizontalAlignment="Stretch" Margin="10,43" TextWrapping="Wrap" Text="input" VerticalAlignment="Stretch"/>
<Button x:Name="Add" Content="Add" HorizontalAlignment="Stretch" Margin="197,228,10,10" VerticalAlignment="Stretch" Width="" Click="Add_Click"/>
</Grid>
7 </Viewbox>
Viewbox中的子控件需要将HorizontalAligment和VerticalAlignment属性(如果不在Canvas中)设为Stretch,这两个属性分别表示子控件在父控件中组合时的水平和竖直对齐特征。Canvas基于绝对定位布局,所以该属性没有作用。
Viewbox可更改Stretch属性选择子元素如何放入Viewbox的可用空间,Stretch的枚举如下:
Fill:调整内容的大小以填充目标尺寸,不保留纵横比;
None:内容保持其原始大小;
Uniform:在保留内容原有纵横比的同时调整内容的大小,以适合目标尺寸。Viewbox中的Stretch属性值默认为Uniform;
UniformToFill:在保留内容原有纵横比的同时调整内容的大小,以填充目标尺寸。 如果目标矩形的纵横比不同于源矩形的纵横比,则对源内容进行剪裁以适合目标尺寸;