none
“Rectangle”的显示宽度设置 RRS feed

  • 问题

  • 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#)
    2012年7月27日 4:54

答案

  • 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

    2012年7月30日 8:41

全部回复

  • starryCheng:请以后发送关于WPF的问题到WPF区域,便于更好解答;我移除你的帖子咯……

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年7月27日 5:23
  • starryCheng:请以后发送关于WPF的问题到WPF区域,便于更好解答;我移除你的帖子咯……

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    不好意思,没注意到“WPF”论坛。。。

    Science and technology is my lover.

    2012年7月27日 6:42
  • 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

    2012年7月30日 8:41