WPF DispatcherTimer в немодальном окне - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть окно прогресса wpf, определенное следующим образом:

<Window x:Class="NeoinfoXmlEditor.WPF.Forms.ProgressDisplayForm"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="84" Width="505" x:Name="root" WindowStartupLocation="CenterScreen">
    <Grid>
        <ProgressBar Height="15" x:Name="MessageProgessBar" HorizontalAlignment="Stretch" VerticalAlignment="Top" Maximum="10000" Margin="10,2,10,2" >
            <ProgressBar.Triggers>
                <EventTrigger RoutedEvent="ProgressBar.Loaded">
                    <BeginStoryboard>
                        <Storyboard x:Name="sb">
                            <DoubleAnimation Storyboard.TargetName="MessageProgessBar"
                                 Storyboard.TargetProperty="Value"
                                 From="0" To="10000" Duration="0:0:45"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </ProgressBar.Triggers>
        </ProgressBar>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="5" Text="{Binding ElementName=root, Path=Message}" />
    </Grid>
</Window>

И код файла:

public partial class ProgressDisplayForm : Window
    {
        public static readonly DependencyProperty MessageProperty =
            DependencyProperty.Register("Message", typeof (string), typeof (ProgressDisplayForm));

        public string Message
        {
            get { return (string) GetValue(MessageProperty); }
            set { SetValue(MessageProperty, value); }
        }

        public ProgressDisplayForm()
        {
            InitializeComponent();
        }

        public void DisplayWindow()
        {
            this.Show();
            this.BeginStoryboard(sb);
        }

    }

Вы видите, что я пытаюсь запустить анимацию progressBarдвумя способами: - используя EventTrigger, на ProgressBar.Loaded - из-за кода, явно

Проблема в том, что ни один из них не работает.

Примечание. Мне нужно открыть это окно и запустить анимацию как немодальное окно, поэтому ShowDialog () не является параметром .Кроме того, я попытался использовать DispatcherTimer, но он почему-то не работает, лучше this.Dispatcher.Invoke () при использовании класса System.Timers.Timer.

Я вызываю метод DisplayWindow () изГлавное окно приложения.

Чего мне не хватает?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

Я выяснил, в чем проблема - я назвал NewWindow.Show (), а затем продолжил некоторые высокопроизводительные вычисления, предполагая, что новое окно будет в отдельном потоке, если не будет вызвано с ShowDialog ().

Я исправил это с помощью BackgroundWorker!

Спасибо за помощь в любом случае!

0 голосов
/ 07 апреля 2011

Я не смог воспроизвести вашу проблему, ваша анимация XAML работает просто отлично, попробуйте скопировать код XAML в новый проект без выделенного кода. Я попробовал это и работал просто отлично: D

Progressbar Animation

...