积极答复者
“Rectangle”的显示宽度设置

问题
-
XAML如下:
<Grid x:Name="LayoutRoot" Width="Auto" Height="Auto" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Canvas Height="65" Width="Auto" Background="#FFE1E1E1" Grid.Row="0" Grid.Column="0"><Rectangle Height="1" Stroke="Black" Canvas.Top="32" StrokeThickness="0" HorizontalAlignment="Left" VerticalAlignment="Top" >
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFE1E1E1" Offset="0"/>
<GradientStop Color="#FFE1E1E1" Offset="1"/>
<GradientStop Color="#FF6C7F8C" Offset="0.517"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle></Canvas>
</Grid>
问题一:页面总体布局是兼容分辨率的,但是“Rectangle”控件却例外。
(1)现在的样式它显示不出来。
(2)指定Width="Auto",“Rectangle”它还是显示不出来。
(3)只有给“Width”指定固定值,它才显示的出来。
敢问大师,怎样设置才可以使“Rectangle”随着“Canvas”的变宽而变宽,时刻和“Canvas”保持一样的宽度???
问题二:“<Grid x:Name="LayoutRoot" Width="Auto" Height="Auto" Background="White">”
“Auto”表示“自动宽度或高度”。是随着“父容器”的宽度而变化的吗??? 还是根据其中“子元素”的宽度变化而变化的???
问题三: “Grid”、“Canvas”这些容器,它们的宽度不能用“*”来设置,Why??? 它们只能设置为“Auto”或“固定值”。
而“Grid”列定义和“DataGrid”列定义就可以使用“*”。
问题四:“100*”,表示的是“100%” , 还是“ >100 ”???
Science and technology is my lover.
- 已移动 ThankfulHeart 2012年7月27日 5:23 WPF问题 (发件人:Visual C#)
答案
-
1. Canvas 是一个利用坐标控制子元素的容器,因此HorizentalAlignment以及VerticalAlignment的定义是无效的,要实现你说的效果,可以让Retangle的Width属性绑定父容器的实际大小,代码参考
Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Canvas},Path=ActualWidth}"
2. Auto 是随子元素大小控制的。希望随容器变化参考HorizentalAlignment和VerticalAlignment。
3. 你需要了解一些有关布局的知识,灵活运用HorizentalAlignment和VerticalAlignment。关于*请看4。
4. *实际上是一种比例的分配,例如在4列中分别定义宽度为*,2*,3*,4*,其效果和100*, 200*, 300*, 400*是一样的,它是计算所有带星元素的比例,即1:2:3:4。如果中间有Auto或者固定的宽度,则在总体宽度中减去这些宽度后按比例分配。
Wanpeng wanpeng.ones@gmail.com
- 已标记为答案 Jie BaoModerator 2012年8月7日 9:51
全部回复
-
1. Canvas 是一个利用坐标控制子元素的容器,因此HorizentalAlignment以及VerticalAlignment的定义是无效的,要实现你说的效果,可以让Retangle的Width属性绑定父容器的实际大小,代码参考
Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Canvas},Path=ActualWidth}"
2. Auto 是随子元素大小控制的。希望随容器变化参考HorizentalAlignment和VerticalAlignment。
3. 你需要了解一些有关布局的知识,灵活运用HorizentalAlignment和VerticalAlignment。关于*请看4。
4. *实际上是一种比例的分配,例如在4列中分别定义宽度为*,2*,3*,4*,其效果和100*, 200*, 300*, 400*是一样的,它是计算所有带星元素的比例,即1:2:3:4。如果中间有Auto或者固定的宽度,则在总体宽度中减去这些宽度后按比例分配。
Wanpeng wanpeng.ones@gmail.com
- 已标记为答案 Jie BaoModerator 2012年8月7日 9:51