Эффект лайтбокса для «блокировки» интерфейса? - PullRequest
0 голосов
/ 28 января 2011

Я ищу способ в WPF по сути «заблокировать» пользовательский интерфейс с точки зрения пользователя: невозможно взаимодействовать, фактически не вызывая условия блокировки, и интуитивно отображать, что он заблокирован.

Наша внутренняя веб-платформа выполняет именно то, что я хотел бы сделать. Если у вас есть подручный (или аналогичный) под рукой, вы можете сами увидеть, о чем я говорю:

1) перейти к http://www.livetechnology.com/

2) открыть консоль firebug

3) введите LT.LiveUI.Util.lockUI (LO.MainSkin.MainArea, {Сообщение: «Необязательный текст»}); в консоль

Вы должны увидеть, как пользовательский интерфейс "заблокирован" так, как я хотел бы достичь. Пользователь не может взаимодействовать с интерфейсом, и отображается сообщение, в дополнение к тому, что пользователь довольно неявно осознает, что интерфейс не может быть использован.

Это похоже на то, как Lightbox будет перекрывать интерфейс и отображать содержимое.

Мое приложение выполняет некоторую работу по сети, что займет некоторое время, и вместо того, чтобы использовать простой модальный режим или отключать каждый элемент в моем пользовательском интерфейсе и делать его глупым (помимо непригодного для использования), я хотел бы использовать это эффект.

Прозрачное, затененное наложение было бы хорошим прикосновением (по моему мнению). Я (конечно) знаю, что я могу сделать это без затененного наложения модальным диалоговым окном, но затем пользователю часто оставляют щелкать пользовательский интерфейс, который там есть, но ничего не делает.

Ответы [ 2 ]

0 голосов
/ 13 августа 2011

Это то, что я сделал после прочтения нескольких постов об изменении альфа-канала цвета для имитации эффекта лайтбокса. У меня есть окно, которое займет весь экран, его задний фон анимирован с помощью раскадровки. Просто добавьте ваш контент / xaml в grdContent. надеюсь, что это полезно.

$<Window x:Name="window" x:Class="DropShadowEffect.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" WindowState="Maximized"  WindowStyle="None" AllowsTransparency="True"   >
<Window.Resources>
    <Storyboard x:Key="Storyboard1">
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="window">
            <EasingColorKeyFrame KeyTime="0" Value="Transparent"/>
            <EasingColorKeyFrame KeyTime="0:0:0.5" Value="#66605757"/>
        </ColorAnimationUsingKeyFrames>

    </Storyboard>

</Window.Resources>
<Window.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
        <BeginStoryboard Storyboard="{StaticResource Storyboard1}"/>
    </EventTrigger>
</Window.Triggers>
<Grid Name="grdContent" Width="400" Height="500"  Background='#FFFFFFFF'>
    <TextBlock>your cobtent goes here!!!!!!!!!!</TextBlock>
</Grid>

0 голосов
/ 28 января 2011

Конечно; вам просто нужен полупрозрачный прямоугольник, видимость которого связана с логическим свойством «lock» (с BooleanToVisibilityConverter).

Пока элемент видим и тест на удар видим, он будет блокировать щелчок для доступа ко всему, что находится под ним. Насколько я помню, вам также может понадобиться перехватить нажатие вкладки и пометить ее как обработанную, чтобы пользователь не мог перейти на другие элементы управления.

Я использовал эту технику для создания лайтбоксов и использовал кнопку для фона, чтобы при щелчке за пределами диалогового окна он не отображался.

...