2012-11-23 5 views
6

sto ottenendo un errore:SaveFileDialog di Silverlight sta dando errore "dialogo deve essere avviato dall'utente"

Dialog must be user-initiated 

quando sto aprendo la finestra di savefile dal mio silverlight applicaiton Sto usando sottostante Codice

principale Button evento click:

private void btnSaveAttach_Click(object sender, RoutedEventArgs e) 
     { 
      if (EditableGV.SelectedItems.Count == 1) 
      { 
       PositionAttachment posAtt = new PositionAttachment(); 
       posAtt = (PositionAttachment)EditableGV.SelectedItems[0]; 
       SaveFile(posAtt.File, posAtt.FileName); 

      } 
      else 
      { 
       RadWindow.Alert("Please select a attachment from the existing attachments list.", null); 
       return; 
      } 

     } 

private void SaveFile(byte[] fileByte, string fileName) 
    { 
     try 
     { 
      byte[] fileBytes = fileByte;//your bytes here 

      //Show the dialog   

      SaveFileDialog dialog2 = new SaveFileDialog(); 
      saveDialog = dialog2.ShowDialog();//This line is giving the error 

      if (saveDialog == true) 
      { 
       //Get the file stream 
       dialog2.DefaultFileName = fileName; 
       string fileExt = fileName.Substring(fileName.LastIndexOf('.'), fileName.Length); 
       dialog2.DefaultExt = "All Files|*.*|" + fileExt + "|*." + fileExt + ""; 
       using (Stream fs = (Stream)dialog2.OpenFile()) 
       { 
        fs.Write(fileBytes, 0, fileBytes.Length); 
        fs.Close(); 

        //File successfully saved 
       } 
      } 
     } 
     catch 
     { 
      MessageBox.Show("Error in downloading file"); 
     } 
    } 

Codice Xmal:

<StackPanel x:Name="Layout"> 
    <StackPanel x:Name="Messagepanel" Margin="2" Visibility="Collapsed"> 
     <TextBlock x:Name="txtMessage" Text="1" Height="35"></TextBlock> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" Margin="4"> 
     <sdk:Label Height="28" Content="Select File:" Name="lblSelectFile" Grid.Column="0" Grid.Row="0" Width="70" /> 
     <TextBox Name="txtFileName" IsReadOnly="True" HorizontalAlignment="Left" VerticalAlignment="Center" Width="303" Grid.Column="1" Margin="12,1,0,0"></TextBox> 
     <Button Content="Browse" Name="btnBrows" Width="55" Height="22" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="16,1,0,0" Click="btnBrows_Click" Grid.Column="1" /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" Margin="4"> 
     <sdk:Label Height="28" Content="Description:" Name="lblFileDescription" Grid.Column="0" Grid.Row="1" Width="70" /> 
     <TextBox Height="60" Name="txtComments" Grid.Column="1" 
     VerticalScrollBarVisibility="Auto" Width="301" Margin="13,0,85,2" Grid.Row="1" /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" Margin="4"> 

     <Button x:Name="OKButton" Content="Add" Click="OKButton_Click" Width="43" Margin="363,6,10,15" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left" /> 

     <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="53" HorizontalAlignment="Right" Margin="0,6,200,15" Grid.Row="2" Grid.Column="1" /> 
    </StackPanel> 
    <StackPanel Orientation="Vertical" Margin="4" Height="224"> 
     <sdk:Label Content="Existing Attachment(s):" Height="20" Margin="15,7,324,10" Name="lblExistingAttachemnt" /> 
     <telerikGrid:RadGridView x:FieldModifier="public" 
         x:Name="EditableGV" 
         AutoGenerateColumns="False" 
         ItemsSource="{Binding PositionAttachemntCollection, Mode=TwoWay}" Margin="0,0,0,7" Height="150"> 
      <telerik:RadGridView.Columns> 
       <telerik:GridViewDataColumn DataMemberBinding="{Binding FileName,Mode=TwoWay}"></telerik:GridViewDataColumn> 
       <telerik:GridViewDataColumn DataMemberBinding="{Binding FileDescription,Mode=TwoWay}"></telerik:GridViewDataColumn> 
       <!--<telerik:GridViewColumn Header="" > 
        <telerik:GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <telerik:RadButton Name="btnDownlaod" Content="Save" Click="HyperlinkButton_Click"></telerik:RadButton> 
          <<HyperlinkButton Click="HyperlinkButton_Click" Content="{Binding FileName,Mode=OneWay}" TargetName="_blank" NavigateUri="http://www.google.com" /> 
         </DataTemplate> 
        </telerik:GridViewColumn.CellTemplate> 
       </telerik:GridViewColumn>--> 
      </telerik:RadGridView.Columns> 
     </telerikGrid:RadGridView> 

     <StackPanel Orientation="Horizontal" Margin="0"> 
      <!--<Button Content="Save Attachment" Name="btnSaveAttach" Width="112" Margin="263,6,10,15" Click="btnSaveAttach_Click" />--> 
      <Button Content="Close" Name="btnClose" Width="75" Margin="3,6,10,15" Click="btnClose_Click" /> 
     </StackPanel> 

    </StackPanel> 
</StackPanel> 

Questa funzione è chiamata su un pulsante di scatto. Mi sto chiedendo di avere un openFiledialog anche sulla stessa pagina ma sta aprendo la finestra di dialogo senza errori. perché quella finestra di dialogo savefile sta causando un errore.

riportano di seguito le tracce di stack dell'errore:

at System.Windows.Controls.SaveFileDialog.ShowDialogInternal(Window owner) 
    at System.Windows.Controls.SaveFileDialog.ShowDialog() 
    at IPVWorkbench.Views.AddPositionAttachments.btnSaveAttach_Click(Object sender, RoutedEventArgs e) 
    at System.Windows.Controls.Primitives.ButtonBase.OnClick() 
    at System.Windows.Controls.Button.OnClick() 
    at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 
    at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e) 
    at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags) 
+1

Quale codice si trova tra il clic del pulsante e questa chiamata? C'è un tempo minimo tra l'azione dell'utente e quando deve apparire la finestra di dialogo. Se superi questa volta otterrai questo errore. – ChrisF

+0

Sto recuperando i dati del file e li ho archiviati in una variabile pubblica "fileByte" –

+0

Da dove prelevano i dati? Sta usando una chiamata asincrona? – ChrisF

risposta

0

ho trovato una soluzione per questo. Ho mostrato una casella di conferma sul clic del pulsante e sull'evento "OK" della finestra di conferma apro la finestra di dialogo per il salvataggio del file, in questo modo non lancia alcuna eccezione.

1

Hai bisogno di mostrare il SaveFileDialog nel btnSaveAttach_Click (in questo modo si è avviata dall'utente). Anche remove all your breakpoints in quanto possono produrre anche quell'errore.

Provate questo e vedere se funziona, allora si costruisce il resto del codice basato su di esso:

private void btnSaveAttach_Click(object sender, RoutedEventArgs e) 
{ 
    SaveFileDialog dialog2 = new SaveFileDialog(); 
    saveDialog = dialog2.ShowDialog(); 
} 
+0

Non funziona ... Lo stesso errore sta arrivando, ho rimosso anche tutti i breakpoint. –

+0

quale versione di SL stai usando? –

+0

sto usando Silverlight 5 –

Problemi correlati