Как отобразить сообщение о занятости на экране - PullRequest
5 голосов
/ 22 декабря 2010

Привет, у меня есть приложение WPF на основе Prism4.При выполнении медленных операций я хочу показать занятый экран.У меня будет большое количество экранов, поэтому я пытаюсь встроить в среду одно решение, а не добавлять индикатор занятости на каждый экран.

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

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

Это, однако, становится трудным.Кажется, холсты не очень хорошо для этого настроены, и я думаю, что я неправильно лаю.

Буду признателен за любую помощь.Спасибо.

Ответы [ 2 ]

13 голосов
/ 22 декабря 2010

Я сделал это с помощью нескольких программ. Вот в двух словах:

(Это проще всего с MVVM. Прошло так много времени с тех пор, как я использовал codebehid для таких вещей, что я не могу сказать, есть ли хороший способ сделать это.)

  1. Создайте границу в главном окне. Я обычно делаю это черным с прозрачностью 50%. Добавьте к нему сетку и поместите все, что хотите, чтобы сообщить пользователям, что она занята. Размер рамки и элементы управления внутри него, чтобы заполнить экран.
  2. Создайте свойство на вашей основной ViewModel для IsBusy как логическое. Инициализируйте это как Ложь. Свяжите свойство Visibility границы Busy с этим свойством.
  3. Затем создайте класс преобразователя для Busy (Boolean) в Visibility. Запишите эту логику так, чтобы при значении «Истина» видимость становилась видимой, а при значении «ложь» видимость сворачивалась. (http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx).
  4. Вернитесь на границу, добавьте конвертер в привязку. Добавьте код в ViewModel для каждой из ваших страниц или представлений, который обращается к этому свойству, и присваивает ему значение true, когда ваш другой поток занят.

Cory

Edit:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">

<Grid>

    <Border BorderBrush="Black" BorderThickness="1" Background="#80000000" Visibility="Collapsed">
        <Grid>
            <TextBlock Margin="0" TextWrapping="Wrap" Text="Busy...Please Wait" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="26.667" FontWeight="Bold" Foreground="#7EFFFFFF"/>
        </Grid>
    </Border>

    <DockPanel x:Name="LayoutRoot">
        <CheckBox Content="CheckBox" VerticalAlignment="Top"/>
        <TextBlock TextWrapping="Wrap"><Run Text="TextBlock"/></TextBlock>
        <UserControl x:Name="ViewViewView"/>
    </DockPanel>
</Grid>

3 голосов
/ 22 декабря 2010

Посмотрите на этот инструментарий WPF с индикатором занятости: https://github.com/xceedsoftware/wpftoolkit/wiki/BusyIndicator

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