Как применить один и тот же прямоугольник отражения к нескольким элементам - PullRequest
0 голосов
/ 04 января 2012

У меня есть набор преобразований, которые я применяю для создания необычного отражения для элементов управления. Я хочу иметь возможность применять те же вещи к другим элементам, но я не знаю, как сгруппировать их и применить как ресурс.

Может кто-нибудь мне помочь? Вот некоторый код, который применяет преобразование к первому текстовому полю. Это выглядит много, но довольно просто, это просто прямоугольник под элементом управления, с применением нескольких преобразований и других визуальных эффектов. Я хочу сделать то же самое с этим прямоугольником, но применить его к другим элементам управления (и таким образом каким-то образом параметризировать привязки.)

        <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>

Ответы [ 2 ]

0 голосов
/ 04 января 2012

Как насчет использования старого доброго пользовательского элемента управления? Графический объект, который вы хотите отразить, будет Контентом. Таким образом, чтобы использовать его, вы должны сделать что-то вроде:

 <Reflect> <TextBlock Text="Wow so much sun" /> </Reflect>

Будьте осторожны, чтобы привязать ширину / высоту элемента управления к ширине + кое-что и 2 * Высота содержимого (возможно с конвертерами)

0 голосов
/ 04 января 2012

Я думаю Adorners - это то, что вы ищете здесь. Они отображаются поверх элементов управления в их собственном слое, и вы можете украсить любой элемент UIE, какой пожелаете, в вашем случае вы бы украсили текстовое поле прямоугольником, для которого определены эти свойства. Статья MSDN об Adorners - хорошее начало, и ее довольно легко прочитать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...