TranslateTransform в стиле - PullRequest
1 голос
/ 26 июня 2009

У меня есть следующий код:

  <Window.Resources>
<Style TargetType="{x:Type TextBlock}">
  <Setter Property="LayoutTransform">
    <Setter.Value>
      <TranslateTransform />
    </Setter.Value>
  </Setter>
  <Style.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
      <EventTrigger.Actions>
        <BeginStoryboard>
          <Storyboard RepeatBehavior="Forever" AutoReverse="True">
            <DoubleAnimation 
              From="300"
              To="-300" 
              Storyboard.TargetProperty="LayoutTransform.X"
              Duration="0:0:1" />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>          
    </EventTrigger>
  </Style.Triggers>      
</Style>


<TextBlock
  Grid.Column="1"
  Text="This is a sample text."/>

<Rectangle Grid.Column="0" Fill="AliceBlue"/>
<Rectangle Grid.Column="2" Fill="Aquamarine"/>

По сути, я пытаюсь добиться того, чтобы содержимое TextBlock прокручивалось справа налево (и обратно). Почему-то этот стиль ничего не делает. Если я изменяю TranslateTransform на ScaleTransform и меняю LayoutTransform.X на LayoutTransform.ScaleX, TextBlock анимируется просто отлично. Это ошибка в WPF или я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 08 августа 2014

У меня была такая же проблема с RotateTransform. Я хотел, чтобы все мои элементы управления имели эту анимацию. Я нашел решение для него, и похоже, что оно работает и с TrasnslteTransform.

Попробуйте следующий код:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <Style TargetType="{x:Type TextBox}">
        <Setter Property="RenderTransform">
            <Setter.Value>
                <TranslateTransform X="0" Y="0"/>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <EventTrigger.Actions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="(TextBox.RenderTransform).(TranslateTransform.X)"
                                             From="300"
                                             To="-300"
                                             AutoReverse="True"
                                             RepeatBehavior="Forever"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <TextBox Width="200" Height="22"/>
</Grid>

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

Я знаю, что прошло 5 лет с тех пор, как был задан вопрос, но кто-то другой может получить пользу от ответа. :)

0 голосов
/ 26 июня 2009

Не уверен, что я вообще следую, как это работает, но я бы подумал, что вам нужно указать TargetProperty как X и TargetName как _translateTransform:

<Window.Resources>
<Style TargetType="{x:Type TextBlock}">
  <Setter Property="LayoutTransform">
    <Setter.Value>
      <TranslateTransform x:Name="_translateTransform"/>
    </Setter.Value>
  </Setter>
  <Style.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
      <EventTrigger.Actions>
        <BeginStoryboard>
          <Storyboard RepeatBehavior="Forever" AutoReverse="True">
            <DoubleAnimation 
              From="300"
              To="-300" 
              Storyboard.TargetProperty="X"
              Storyboard.TargetName="_translateTransform"
              Duration="0:0:1" />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>          
    </EventTrigger>
  </Style.Triggers>      
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...