为什么在这三种情况下网格的RenderSize都保持不变?

时间:2018-11-15 18:13:14

标签: c# .net wpf

<Window x:Class="TestProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TestProject"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

        <!--The following code snippets go here-->

</Window>

示例1

<Grid>
    <Grid x:Name="myGrid" Width="200" Height="100" Background="Green">
        <Grid.LayoutTransform>
            <ScaleTransform ScaleX="3" ScaleY="1" CenterX=".5" CenterY=".5"></ScaleTransform>
        </Grid.LayoutTransform>
    </Grid>
</Grid>

实际:

myGrid.RenderSize
{200,100}
    Height: 100
    IsEmpty: false
    Width: 200

myGrid.DesiredSize
{600,100}
    Height: 100
    IsEmpty: false
    Width: 600

预期:

myGrid.RenderSize
{200,100}
    Height: 100
    IsEmpty: false
    Width: 600

myGrid.DesiredSize
{600,100}
    Height: 100
    IsEmpty: false
    Width: 600

示例2

<Grid>
    <Grid x:Name="myGrid" Width="200" Height="100" Background="Green">
        <Grid.RenderTransform>
            <ScaleTransform ScaleX="3" ScaleY="1" CenterX=".5" CenterY=".5"></ScaleTransform>
        </Grid.RenderTransform>
    </Grid>
</Grid>

实际:

myGrid.RenderSize
{200,100}
    Height: 100
    IsEmpty: false
    Width: 200

myGrid.DesiredSize
{200,100}
    Height: 100
    IsEmpty: false
    Width: 200

预期:

myGrid.RenderSize
{200,100}
    Height: 100
    IsEmpty: false
    Width: 600

myGrid.DesiredSize
{200,100}
    Height: 100
    IsEmpty: false
    Width: 200

示例3

<Viewbox Stretch="UniformToFill">
    <Grid x:Name="myGrid" Width="200" Height="100" Background="Green"></Grid>
</Viewbox>

实际:

myGrid.RenderSize
{200,100}
    Height: 100
    IsEmpty: false
    Width: 200
myGrid.DesiredSize
{200,100}
    Height: 100
    IsEmpty: false
    Width: 200

预期:

不确定,如果Viewbox使用RenderTransform,那么我希望myGrid.RenderSize.Width600,而myGrid.DesiredSize.Width200,否则,如果Viewbox使用{{ 1}},那么我期望LayoutTransformmyGrid.RenderSize.WidthmyGrid.DesiredSize.Width


我基于以下布局过程阶段得出预期结果:

  1. LayoutTransform
  2. 测量-每个元素的DesiredSize在这里都是计算机
  3. 安排-确定子元素在其父母中的位置
  4. RenderTransform
  5. 渲染-RenderSize在这里是计算机,元素渲染到屏幕上

问题:

  • Viewbox是否应用RenderTransform或LayoutTransform?
  • RenderTransform如何更改元素,以使RenderSize尺寸不变?
  • 例如,为什么1,即使将LayoutTransform应用于600,并且Desired with是600,为什么“ Rendered Width”还是200?

谢谢。

0 个答案:

没有答案