отключение всех кликов на короткий период после нажатия на изображение - PullRequest
0 голосов
/ 02 апреля 2012

Я использую несколько изображений для создания чего-то вроде виртуальной клавиатуры.Я хочу добавить короткий промежуток времени после нажатия на изображение, где за короткий промежуток времени все клики на изображениях отключены.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 Ответ

1 голос
/ 02 апреля 2012

в Silverlight Я сделал это с помощью VisualStateManager

В WPF нет большой разницы

изм

Я создал образец Storyboard для отключенного WPF UIElement.

    <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>

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 отвечает за просмотр. он должен быть частью XAML, а не ViewModel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...