我有一组转换,用于对控件进行奇特的反射。我希望能够将相同的东西应用于其他元素,但我不知道如何将其组合在一起,并将其作为资源应用。
有人能帮我吗?下面是一些代码,它将转换应用于第一个文本框。它看起来很多,但非常简单,它只是一个控件下的矩形,应用了一些变换和其他视觉效果。我想要的是对这个矩形做同样的操作,但将其应用于其他控件(并以某种方式参数化绑定)
<StackPanel Margin="40">
<TextBlock x:Name="TitleDisp" FontSize="40" FontFamily="Verdana" Opacity="0.8" HorizontalAlignment="Center">Sample Title</TextBlock>
<Rectangle Height="{Binding Path=ActualHeight, ElementName=TitleDisp}" Width="{Binding Path=ActualWidth, ElementName=TitleDisp}">
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=TitleDisp}"/>
</Rectangle.Fill>
<Rectangle.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="0.75"/>
<SkewTransform AngleX="10" AngleY="8"/>
<TranslateTransform X="30" Y="-10"/>
</TransformGroup>
</Rectangle.RenderTransform>
<Rectangle.OpacityMask>
<LinearGradientBrush EndPoint="0,1">
<GradientStop Offset="0" Color="Transparent"/>
<GradientStop Offset="1" Color="#77000000"/>
</LinearGradientBrush>
</Rectangle.OpacityMask>
<Rectangle.Effect>
<BlurEffect/>
</Rectangle.Effect>
</Rectangle>
</StackPanel>
我认为Adorners
正是您想要的。它们在自己层中的控件顶部渲染,您可以装饰任何您想要的UIElement,在您的情况下,您将使用定义了这些属性的矩形来装饰文本框。MSDN上关于Adorners的文章是一个很好的开始,阅读起来也很容易。
使用一个好的旧用户控件怎么样?要反映的图形对象将是内容。所以要使用它,你可以做一些类似的事情:
<Reflect> <TextBlock Text="Wow so much sun" /> </Reflect>
小心将控制宽度/高度缩放为宽度+某物和2*内容高度(可能使用转换器)