C# 绘制控件两次

C# 绘制控件两次,c#,wpf,repaint,C#,Wpf,Repaint,我正在开发一个非常吸引人的程序,我需要在控件中添加反射和3D深度 在这两种情况下,我都需要在控件上绘制几次,但有一些更改: 对于反射,我必须在底部重新绘制控件并翻转它 至于3D深度,只是从后面到侧面有很多拷贝 问题是如何获得控件的图像,以便对其进行修改并在其下方/后面绘制?您是否有关于此类操作的任何警告和警告/有用提示?(我以前从未尝试过类似的事情) 非常感谢。在WPF中,您可以使用可视化画笔作为另一个元素(例如矩形)的背景/填充。此VisualBrush具有一个Visual属性,可以将该属性绑

我正在开发一个非常吸引人的程序,我需要在控件中添加反射和3D深度

在这两种情况下,我都需要在控件上绘制几次,但有一些更改:

对于反射,我必须在底部重新绘制控件并翻转它

至于3D深度,只是从后面到侧面有很多拷贝

问题是如何获得控件的图像,以便对其进行修改并在其下方/后面绘制?您是否有关于此类操作的任何警告和警告/有用提示?(我以前从未尝试过类似的事情)


非常感谢。

在WPF中,您可以使用
可视化画笔
作为另一个元素(例如
矩形
)的背景/填充。此
VisualBrush
具有一个
Visual
属性,可以将该属性绑定到另一个控件以模拟其内容。在此控件上使用变换和alpha遮罩有助于应用反射样式效果。例如:

  <StackPanel Width="200">  
    <TextBox x:Name="tb">Hello world</TextBox>
    <Rectangle Height="40" HorizontalAlignment="Stretch">
      <Rectangle.Fill>
        <VisualBrush Visual="{Binding ElementName=tb}"  />
      </Rectangle.Fill>
      <Rectangle.RenderTransform>
        <ScaleTransform CenterY="20" ScaleY="-1" />
      </Rectangle.RenderTransform>
      <Rectangle.OpacityMask>
        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
          <GradientStop Color="#00000000" Offset="0" />
          <GradientStop Color="#FFFFFFFF" Offset="1" />
        </LinearGradientBrush>
      </Rectangle.OpacityMask>
    </Rectangle>
  </StackPanel>

你好,世界