none
Использование класса Effects.Effect RRS feed

  • Вопрос

  • Здравствуйте. Возник вопрос: писал код для шаблона кнопки, использовал следующий код:

    <Style TargetType="Button" x:Key="ButtonStyle">
                <Setter Property="Background" Value="Black"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Grid>
                                <Path x:Name="Path" Stroke="CornflowerBlue" StrokeThickness="5"  
                                      Data="M 0,25 C 30,25 30,5    45,2.5  L 265 2.5  C 280,2.5  280,25 310,25                                         M 0,25 C 30,25 30,47.5 45,47.5 L 265 47.5 C 280,47.5 280,25 310,25" Fill="Black">
                                    <Path.BitmapEffect>
                                        <BitmapEffectGroup>
                                            <OuterGlowBitmapEffect x:Name="Glow"  GlowColor="Blue" GlowSize="10" Opacity="0" />
                                            <BevelBitmapEffect BevelWidth="3" />
                                        </BitmapEffectGroup>
                                    </Path.BitmapEffect>
                                </Path>
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="40,10">
                                    <TextBlock x:Name="headerTextBlock" HorizontalAlignment="Left" Margin="0" TextWrapping="Wrap" Text="X:" VerticalAlignment="Stretch" Foreground="Orange"/>
                                    <TextBlock x:Name="answerTextBlock" Margin="5,0,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Stretch" HorizontalAlignment="Left"/>
                                </StackPanel>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Trigger.EnterActions>
                                        <BeginStoryboard>
                                            <Storyboard>
                                                <DoubleAnimation To="1" Duration="0:0:0.200"
                                                    Storyboard.TargetName="Glow"
                                                    Storyboard.TargetProperty="Opacity"/>
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </Trigger.EnterActions>
                                    <Trigger.ExitActions>
                                        <BeginStoryboard>
                                            <Storyboard>
                                                <DoubleAnimation To="0" Duration="0:0:0.200"
                                                    Storyboard.TargetName="Glow"
                                                    Storyboard.TargetProperty="Opacity"/>
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </Trigger.ExitActions>
                                </Trigger>
                                <Trigger Property="IsFocused" Value="True">
                                    <Setter Property="Fill" TargetName="Path" Value="Orange"/>
                                    <Setter Property="Foreground" TargetName="headerTextBlock" Value="White"/>
                                    <Setter Property="Foreground" TargetName="answerTextBlock" Value="Black"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="Foreground" Value="White"/>
                <Setter Property="FontSize" Value="18"/>
                <Setter Property="Margin" Value="0,5"/>
                <Setter Property="Effect">
                    <Setter.Value>
                        <DropShadowEffect/>
                    </Setter.Value>
                </Setter>
    </Style>

    Но мсдн пишет, что

    Effect." id="mt1"> "Примечание. Этот API устарел. Рекомендуемой новой альтернативой является Effect. Создание скоса, которая создает область образа в соответствии с указанной кривой."

    Вопрос: а как можно аналогичное выполнить с помощью Effect?


    11 октября 2012 г. 22:54

Ответы

  • Привет.

    В действительности, начиная с WPF4 данные свойства признали устаревшими и рекомендуется использовать класс Effect вместо. Но к сожалению стандартную замену ввели не всем эффектам и придется их реализовавывать самому, либо искать готовые реализации.

    Например OuterGlowBitmapEffect можно заменить с помощью DropShadowEffect у которого задан ShadowDepth="0". Об этом пишут здесь - OuterGlowBitmapEffect Alternative Without BitmapEffects

    А вот BevelBitmapEffect так просто заменить не удастся, его замену можете найти в теме BitmapEffect is absolete, how can I use Effect for BevelBitmapEffect

    Надеюсь данная информация поможет вам в решении проблемы.


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 19 октября 2012 г. 8:06
    15 октября 2012 г. 9:09

Все ответы

  • Привет.

    В действительности, начиная с WPF4 данные свойства признали устаревшими и рекомендуется использовать класс Effect вместо. Но к сожалению стандартную замену ввели не всем эффектам и придется их реализовавывать самому, либо искать готовые реализации.

    Например OuterGlowBitmapEffect можно заменить с помощью DropShadowEffect у которого задан ShadowDepth="0". Об этом пишут здесь - OuterGlowBitmapEffect Alternative Without BitmapEffects

    А вот BevelBitmapEffect так просто заменить не удастся, его замену можете найти в теме BitmapEffect is absolete, how can I use Effect for BevelBitmapEffect

    Надеюсь данная информация поможет вам в решении проблемы.


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 19 октября 2012 г. 8:06
    15 октября 2012 г. 9:09
  • Пожалуйста, не бросайте тему без ответа. Спасибо.

    Для связи [mail]

    19 октября 2012 г. 8:06
  • Конечно, извиняюсь. В общем, я не понял, как воспользоваться этим контролом, скачал проект, надеялся хотя бы на dll-ку, там же куча исходников, которые к тому же не компилируются. В свой проект встраивать и пробовать пока не стал, боюсь :)
    22 октября 2012 г. 12:25