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.

    2012年7月27日 4:52

答案

  • 你好,

    Re:问题一:

        请使用Grid代替Canvas,并设置Rectangle的HorizontalAlignment和VerticalAlignment为Stretch:

            <Grid Height="65" Margin="5"  Background="#FFE1E1E1" Grid.Row="0" Grid.Column="0">
                <Rectangle Height="5"  Margin="5"  Stroke="Black"  StrokeThickness="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <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>
            </Grid>

    Re:问题二:

        “The layout system interprets the "Auto" value to generally mean that the object should be sized to the available size in layout, instead of to a specific pixel value.” 也就是说,随着父容器变化而变化。

    Re:问题三:

        “When Star is selected as the height or width of a row or column, that column or row receives a weighted proportion of the remaining available space. Star sizing is the default behavior. ”

        “Columns and rows can use Auto sizing to distribute space evenly based on the size of the content that is within a column or row.”

        以上是*和auto使用的区别。(详细请参考:http://msdn.microsoft.com/en-us/library/system.windows.controls.grid(v=vs.95).aspx )

        简单来说,*用来指定一列或者一行占剩余可用空间的加权比例。也就是和其他列或者行共同分配剩余可用空间(如有疑惑,可查看问题四解答)。而某列或者某行指定为auto,那它的分配大小则取决于此列或者此行内正文内容大小。

    Re:问题四:

        “100*”并不是指100%,一般的,其前后还有相同或者类似的设置。比如:

            <Grid.RowDefinitions>
                <RowDefinition Height="100*"/>
                <RowDefinition Height="200*"/>
            </Grid.RowDefinitions>

    这指的是,Grid第一列占剩余可用空间的1/3,第2列占剩余可用空间的2/3。

    2012年7月30日 6:47
    版主