WPF字体输入倒影效果

众所周知WPF是微软新一代图形系统,因此是用来做界面的。利用它可以做出许多漂亮的界面,比如说这个:字体输入倒影效果

image

我承认,这只是个Demo,因此大家大可以不必太苛刻。

其中用了变换的知识,可以参考这篇文章http://www.cnblogs.com/Wade-/archive/2012/07/03/2575421.html

以往的博客中都要附上代码的,这次则不同,因为它不用任何代码就可以实现这样的效果。

先分解下界面,一个两行的Grid,第一行放置一个TextBox文本输入框,第二行则放置一个Rectangle矩形。

还记得VisualBrush画刷吗?一个简单而又功能强大的画刷,它直接复制目标元素的内容。因此,将Rectangle的Fill属性设置为VisualBrush画刷就可以实现将TextBox的内容“印”到Rectangle中。

<Rectangle.Fill> 

    <VisualBrush Visual="{Binding ElementName=txt}"></VisualBrush> 

</Rectangle.Fill> 

 

那如何使它由透明变不透明色呢?如果仅仅实现透明,可以用Opacity;若实现渐变,需要用渐变画刷,并把画刷LinearGradientBrush放在OpacityMask属性中,这样就可以了。

<Rectangle.OpacityMask> 

    <LinearGradientBrush StartPoint="1,0" EndPoint="1,1"> 

        <GradientStop Offset="0.3" Color="Transparent"></GradientStop> 

        <GradientStop Offset="1" Color="White"></GradientStop> 

    </LinearGradientBrush> 

</Rectangle.OpacityMask> 

 


还差一点没有完善,那就是字倒过来。如何到?这就需要用变换了。若实现这样的效果自然要使用ScaleTransform。把它放在RenderTransform属性中。

<Rectangle.RenderTransform> 

    <ScaleTransform  ScaleY="-1"></ScaleTransform> 

</Rectangle.RenderTransform> 

 

测试一下。咦?怎么无法输入?原来是Rectangle把TextBox盖住了。怎么解决呢?那就需要改变变换的位置,设置 RenderTransformOrigin="0.5,0.5",这样就OK了。

 

以下是完整xaml:

<Window x:Class="WpfApplication8.MainWindow" 

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

        Title="WPF字体输入倒影效果" Height="350" Width="525"> 

   <Grid Margin="70"> 

        <Grid.RowDefinitions> 

            <RowDefinition></RowDefinition> 

            <RowDefinition></RowDefinition> 

        </Grid.RowDefinitions> 

            <TextBox x:Name="txt" FontSize="60"></TextBox> 

        <Rectangle  Grid.Row="1"  RenderTransformOrigin="0.5,0.5"> 

               <Rectangle.Fill> 

                   <VisualBrush Visual="{Binding ElementName=txt}"></VisualBrush> 

               </Rectangle.Fill> 

                <Rectangle.OpacityMask> 

                    <LinearGradientBrush StartPoint="1,0" EndPoint="1,1"> 

                        <GradientStop Offset="0.3" Color="Transparent"></GradientStop> 

                        <GradientStop Offset="1" Color="White"></GradientStop> 

                    </LinearGradientBrush> 

                </Rectangle.OpacityMask> 

                <Rectangle.RenderTransform> 

                    <ScaleTransform  ScaleY="-1"></ScaleTransform> 

                </Rectangle.RenderTransform> 

            </Rectangle> 

    </Grid>   

</Window> 

 

欢迎大家给我提意见或建议!

你可能感兴趣的:(WPF)