单击图像后短时间内禁用所有点击

时间:2012-04-02 03:29:44

标签: c# wpf

我正在使用多个图像来创建类似虚拟键盘的东西。我希望在点击图像后添加一小段时间,在短时间内,禁用所有图像点击。 any1知道怎么做吗?这是我的其中一张图片的代码。

<Button Grid.Column="2" Command="{Binding Path=PressAndRelease}" CommandParameter="Q" Style="{StaticResource TransparentButton}" Effect="{Binding}">
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Grid>
                <Image Name="imgNormalQ" Source="/wa;com/Images/alp/q.png" Height="127"/>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Panel.ZIndex" Value="999"/>
                    <Setter TargetName="imgPressedQ" Property="Visibility" Value="Visible"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Button.Template>
</Button>

1 个答案:

答案 0 :(得分:1)

在Silverlight中

我使用VisualStateManager

完成了这项工作

WPF没有太大区别

编辑

我已经为禁用的WPF UIElement创建了示例Storyboard。

    <StackPanel>
        <Border x:Name="MainContent">
            <StackPanel x:Name="ButtonPanel">
                <Button Width="100" Click="AnyButton_Click">Busy State 1</Button>
                <Button Width="100" Click="AnyButton_Click">Busy State 2</Button>
                <Button Width="100" Click="AnyButton_Click">Busy State 3</Button>
            </StackPanel>
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="BusyStates">
                    <VisualState x:Name="Ready" />
                    <VisualState x:Name="Busy">
                        <Storyboard>
                            <BooleanAnimationUsingKeyFrames Duration="0" 
                                                    Storyboard.TargetName="ButtonPanel" 
                                                    Storyboard.TargetProperty="IsEnabled">
                                <DiscreteBooleanKeyFrame KeyTime="0" Value="False"/>
                            </BooleanAnimationUsingKeyFrames>
                        </Storyboard>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
        </Border>
        <Button Width="100" x:Name="ClearButton" Click="ClearButton_Click">Ready</Button>
    </StackPanel>

名为“Busy”的VisualState将为ButtonPanel.IsEnabled = false设置动画(在keytime = 0时)

这是

背后的基本代码
private void AnyButton_Click(object sender, RoutedEventArgs e)
{
    VisualStateManager.GoToElementState(MainContent, "Busy", true);
}

private void ClearButton_Click(object sender, RoutedEventArgs e)
{
    VisualStateManager.GoToElementState(MainContent, "Ready", true);
}

PS。如果你遵循MVVM。 VisualStateManager负责View。它应该是XAML的一部分而不是ViewModel