Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在RenderTransform属性上应用ScaleTransfrom后,新维度仍然相同_Wpf_Rendering_Height_Width_Transform - Fatal编程技术网

Wpf 在RenderTransform属性上应用ScaleTransfrom后,新维度仍然相同

Wpf 在RenderTransform属性上应用ScaleTransfrom后,新维度仍然相同,wpf,rendering,height,width,transform,Wpf,Rendering,Height,Width,Transform,在对渲染transfrom属性执行缩放变换后,我得到了相同的维度。代码如下: shape.Width = 100; shape.Height=100; shape.RenderTransform = new ScaleTransform(.5, .5); textBox.text = shape.ActualWidth + " " + shape.ActualHeight; 我已经尝试获取渲染几何体边界的宽度和高度,但仍然相同。我也试过了,还是没用。如果我做错了什么,我们将不胜感激 尝试

在对渲染transfrom属性执行缩放变换后,我得到了相同的维度。代码如下:

 shape.Width = 100; shape.Height=100;
 shape.RenderTransform = new ScaleTransform(.5, .5);
 textBox.text = shape.ActualWidth + " " + shape.ActualHeight;

我已经尝试获取渲染几何体边界的宽度和高度,但仍然相同。我也试过了,还是没用。如果我做错了什么,我们将不胜感激

尝试设置LayoutTransform而不是RenderTransform。

LayoutTransform和RenderTransform之间的主要区别在于应用转换的时间。使用“渲染变换”(Render Transform)时,对象的完整大小将在布局过程中使用,并且只有在布局过程完成后,才会变换对象。其他因素也受此影响。使用LayoutTransform,对象已在布局阶段转换,这意味着对于所有预期目的,对象的边界框都会更改。所有其他元素也适应这种变化

两者都不会更改实际宽度或实际高度,因为这会影响正在变换的对象的内部布局,从而使变换操作无效

您可以在我为您准备的以下示例中看到这一点:

<StackPanel>
    <Border Name="OuterBorder1" HorizontalAlignment="Left" VerticalAlignment="Top" Background="Yellow">
        <Border Width="100" Height="100" Background="Green" Name="Border1" />
    </Border>
    <Button Content="Normal" Click="Normal_Click"/>
    <Button Content="Layout Transform" Click="Layout_Click"/>
    <Button Content="Render Transform" Click="Render_Click"/>
    <TextBlock Text="{Binding Path=ActualWidth, ElementName=Border1}"></TextBlock>
    <TextBlock Text="{Binding Path=ActualWidth, ElementName=OuterBorder1}"></TextBlock>
</StackPanel>
外订单1在对齐时有一个覆盖,以确保它紧密地安装在项目周围


如您所见,使用RenderTransform时,大小都不会改变。使用LayoutTransform时,变换元素的宽度保持不变,但其周围的容器会受到影响。

尝试等待变换完成,我们可以通过使用快速1毫秒的DoubleAnimation及其完成的事件来了解它。在此事件处理程序中,检查新维度

<Button x:Name="MyButton" Content="A Button"
  RenderTransformOrigin="0.5,0.5">
  <Button.RenderTransform>
    <RotateTransform x:Name="AnimatedRotateTransform" Angle="0" />
  </Button.RenderTransform>
  <Button.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
      <BeginStoryboard>
        <Storyboard>
          <DoubleAnimation 
            Storyboard.TargetName="AnimatedRotateTransform"
            Storyboard.TargetProperty="Angle" 
            To="360" Duration="0:0:0.1" FillBehavior="Stop"
            Completed="RenderTransform_Completed" />
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </Button.Triggers>
</Button>

您还需要等待变换应用完毕。即,在单独的调度程序消息中。尝试在对Dispatcher.BeginInvoke的调用中执行textBox.text分配。。。
<Button x:Name="MyButton" Content="A Button"
  RenderTransformOrigin="0.5,0.5">
  <Button.RenderTransform>
    <RotateTransform x:Name="AnimatedRotateTransform" Angle="0" />
  </Button.RenderTransform>
  <Button.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
      <BeginStoryboard>
        <Storyboard>
          <DoubleAnimation 
            Storyboard.TargetName="AnimatedRotateTransform"
            Storyboard.TargetProperty="Angle" 
            To="360" Duration="0:0:0.1" FillBehavior="Stop"
            Completed="RenderTransform_Completed" />
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </Button.Triggers>
</Button>
    private void RenderTransform_Completed(object sender, EventArgs e)
    {
        textBox.text = AnimatedRotateTransform.Angle;
    }