将控件绘制两次

时间:2012-09-14 12:18:21

标签: c# wpf repaint

我正在制作一个非常令人眼花缭乱的程序,我需要为控件添加反射和3D深度。

在这两种情况下,我需要多次绘制控件,但需要进行更改:

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

至于3D深度,它只是背后的很多副本。

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

非常感谢。

1 个答案:

答案 0 :(得分:2)

在WPF中,您可以使用VisualBrush作为另一个元素的背景/填充(例如Rectangle)。此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>