2011-01-21 3 views
0


Я создаю приложение в Silverlight 4 с MVVM Light.Где я могу разместить busyindicator для обертывания всей страницы, поэтому управление не будет включено до завершения действия.

В настоящее время у меня есть страница со многими элементами управления, т.е. StackPanels, Listbox, TexBlocks и кнопки. У меня есть занятый указатель на странице, привязанный к viewmodel. Когда нажимается кнопка, чтобы сказать, что из базы данных извлекается информация, индикатор занятости отображается и исчезает, когда вызов завершен.

Все это работает.

Я хочу, чтобы вся страница была завернута в busyindicator, так что страница тускнеет и ничего не работает до тех пор, пока событие не будет завершено. Я прочитал, что вы просто обертываете элемент управления внутри Busyindicator. Независимо от того, где я размещаю открытие индикатора, я получаю синие линии, показывающие '. Содержимое Содержимого установлено более одного раза.' Я разместил код ниже, может ли кто-нибудь объяснить, где поставить код индикатора.

 <Grid.RowDefinitions> 
      <RowDefinition Height ="0" /> 
      <RowDefinition Height ="30" /> 
      <RowDefinition Height ="60" /> 
      <RowDefinition Height ="Auto" /> 
      <RowDefinition Height ="40" /> 
     </Grid.RowDefinitions> 

     <TextBlock Grid.Row="1" Grid.Column="0" Text="Header" Width="353" Margin="0 0 0 0" Height="30" /> 

     <StackPanel Grid.Row="2" VerticalAlignment="Center" Orientation="Horizontal" > 

      <Button Grid.Row="2" Grid.Column="0" Content="GetData" Height="35" Width="130" HorizontalAlignment="Left" Margin="0,0,0,0" Command="{Binding GetData}"></Button> 
      <!-- <toolkit:BusyIndicator Width="150" Height="50" IsBusy="{Binding IsBusy}" BusyContent="Searching ..." /> --> 

     </StackPanel> 

     <ListBox x:Name="MyListBox" Grid.Row="3"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"></RowDefinition> 
          <RowDefinition Height="Auto"></RowDefinition> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="400"></ColumnDefinition> 
          <ColumnDefinition Width="70"></ColumnDefinition> 
          <ColumnDefinition Width="10"></ColumnDefinition> 
          <ColumnDefinition Width="70"></ColumnDefinition> 
         </Grid.ColumnDefinitions> 

         <TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" Text="{Binding Name}"></TextBlock> 

         <Button Grid.Row="0" Grid.RowSpan="2" Grid.Column="3" Content="Delete" VerticalAlignment="Center" 
          Command="{Binding Delete}"></Button> 
        </Grid> 

       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

     <TextBlock Grid.Row="4" Margin="5,10,0,0" Text="{BindingMessage}"></TextBlock> 

</Grid> 

ответ

2

Вы должны поместить все содержимое внутри пользовательского элемента управления, как показано ниже:

<toolkit:BusyIndicator Width="150" Height="50" IsBusy="{Binding IsBusy}" BusyContent="Searching ..."> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height ="0" /> 
      <RowDefinition Height ="30" /> 
      <RowDefinition Height ="60" /> 
      <RowDefinition Height ="Auto" /> 
      <RowDefinition Height ="40" /> 
     </Grid.RowDefinitions> 
     <TextBlock Grid.Row="1" Grid.Column="0" Text="Header" Width="353" Margin="0 0 0 0" Height="30" /> 
     <StackPanel Grid.Row="2" VerticalAlignment="Center" Orientation="Horizontal" > 
      <Button Grid.Row="2" Grid.Column="0" Content="GetData" Height="35" Width="130" HorizontalAlignment="Left" Margin="0,0,0,0" Command="{Binding GetData}"></Button> 

     </StackPanel> 
     <ListBox x:Name="MyListBox" Grid.Row="3"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"></RowDefinition> 
          <RowDefinition Height="Auto"></RowDefinition> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="400"></ColumnDefinition> 
          <ColumnDefinition Width="70"></ColumnDefinition> 
          <ColumnDefinition Width="10"></ColumnDefinition> 
          <ColumnDefinition Width="70"></ColumnDefinition> 
         </Grid.ColumnDefinitions> 
         <TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" Text="{Binding Name}"></TextBlock> 
         <Button Grid.Row="0" Grid.RowSpan="2" Grid.Column="3" Content="Delete" VerticalAlignment="Center"        Command="{Binding Delete}"></Button> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     <TextBlock Grid.Row="4" Margin="5,10,0,0" Text="{BindingMessage}"></TextBlock> 
    </Grid> 
</toolkit:BusyIndicator> 
+0

Спасибо за быстрый ответ. Я пробовал это и в режиме разработки, и когда я запускаю приложение, все, что я вижу, это TextBlock с заголовком текста в нем. Это находится в середине моего взгляда, ничего больше не показывающего! – freerider11

+0

Извините, я думаю, что я его взломал! Мне нужно было избавиться от ширины и высоты! Теперь просмотр показывается как следует – freerider11

+0

Работает ли он сейчас? – JSprang