Изменение данных в DataContext с анимацией - PullRequest
0 голосов
/ 15 марта 2012

Я понятия не имею, что решить проблему с помощью следующего кода:

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Window.Resources>
    <XmlDataProvider x:Key="InternalData" XPath="/Workspace">
      <x:XData>
        <Workspace Name="Workspace" xmlns="">
          <Project Name="Project 1"/>
          <Project Name="Project 2"/>
          <Project Name="Project 3"/>
        </Workspace>
      </x:XData>
    </XmlDataProvider>
  </Window.Resources>

  <StackPanel DataContext="{StaticResource InternalData}">
    <ListBox ItemsSource="{Binding XPath=//Workspace/Project}">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding XPath=@Name}"/>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>        
    <TextBox Text="{Binding XPath=//Workspace/Project[1]/@Name, Mode=TwoWay}"/>

  </StackPanel>
</Window>

Как видите, я могу изменить имя первого проекта в рабочей области с помощью TextBox.Изменяя данные, я хочу запустить анимацию для исчезновения старого значения, изменить значение и запустить анимацию для постепенного перехода в новое значение (например, непрозрачность «Project 1» от 1 до 0, изменение данных и непрозрачность «"от 0 до 1) Если возможно, я хотел бы реализовать решение только в XAML.Но понятия не имею.Может быть, что-то с DataTrigger и EnterAction и ExitAction или что-то в этом роде?

С наилучшими пожеланиями Shounborugh

1 Ответ

0 голосов
/ 15 марта 2012

Возможно, вы захотите заглянуть в раскадровки WPF. Это обычная практика, если вы хотите запустить анимацию, используя только XAML. Это лучшее место для начала о раскадровках в WPF http://msdn.microsoft.com/en-us/library/ms742868.aspx

Вот так вы можете запустить раскадровку после изменения текста в текстовом поле

<TextBox Height="23" HorizontalAlignment="Left" Margin="90,44,0,0" Name="textBox1" VerticalAlignment="Top" Width="120">
            <TextBox.Triggers>
                <EventTrigger RoutedEvent="TextBox.TextChanged">
                    <BeginStoryboard>
                        <Storyboard>

                        </Storyboard>

                    </BeginStoryboard>
                </EventTrigger>

            </TextBox.Triggers>

        </TextBox>
...