WPF图像触发事件

时间:2014-01-08 15:45:54

标签: wpf

您好我正在使用WPF网格来表示数据。 我有一个叫做微调器的图像。我想在加载数据(已经完成)以及更新数据时显示微调器。任何人都可以告诉我如何添加触发器,以便微调器在数据源更新或更改时显示?我尝试过SourceUpdated,但它不是RoutedEvent。 WPF新手,如果这是初学者的问题,请道歉。

<UserControl x:Class="My.IGrid.IGridControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <Storyboard x:Key="Spin360" Storyboard.TargetName="Spinner" Storyboard.TargetProperty="RenderTransform.(RotateTransform.Angle)">
            <DoubleAnimation From="0" To="360" BeginTime="0:0:0" Duration="0:0:1.0" RepeatBehavior="Forever" />
        </Storyboard>
    </UserControl.Resources>

    <Grid Name="RootGrid">
        <Border>
            <Border.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="LightGray" Offset="0" />
                    <GradientStop Color="White" Offset="1" />
                </LinearGradientBrush>
            </Border.Background>
            <StackPanel Name="SplashPanel" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.ZIndex="0">
                <Image Name="Spinner" Source="/My.IGrid;component/Images/spinner.png" Width="32" Height="32" RenderTransformOrigin="0.5, 0.5">
                    <Image.Triggers>
                        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                            <EventTrigger.Actions>
                                <BeginStoryboard Storyboard="{StaticResource Spin360}" />
                            </EventTrigger.Actions>
                        </EventTrigger>
                    </Image.Triggers>
                    <Image.RenderTransform>
                        <RotateTransform Angle="0" />
                    </Image.RenderTransform>
                </Image>
            </StackPanel>
        </Border>
    </Grid>
</UserControl>

1 个答案:

答案 0 :(得分:0)

通常,我们将这样的属性添加到我们的视图模型或后面的代码中:

public bool IsBusy { get: set: } // Implement INotifyPropertyChanged interface here

然后每当我们调用一个长时间运行的方法时,我们将其设置为true

IsBusy = true;

每当长时间运行的方法完成后,我们将其设置为false

IsBusy = false;

现在的诀窍是使用bool将此Visibility属性绑定到微调器Image的{​​{1}}属性:

BooleanToVisibilityConverter

当然,您需要将<Image Name="Spinner" Visibility="{Binding IsBusy, Converter={StaticResource BooleanToVisibilityConverter}}" ... /> 名为Converter的实例添加到BooleanToVisibilityConverter部分,但我会假设您已经知道该怎么做此


更新&gt;&gt;&gt;

不,我认为我的误解是我的不好......我现在看到你的代码很清楚,但我以前一定不能正常看。如果您正在使用课程后面的Resources代码,那么当您UserControl可见时,您应该可以访问Storyboard并从代码中启动它:

Image

但是,我认为您会发现在将数据加载到UI控件时它不会正常动画,因为这也将使用单个UI线程。在从后台线程中的数据库加载数据时应该没问题,所以你可能会发现它在短时间内工作然后冻结。