I am getting an error:
Dialog must be user-initiated
when I am opening the savefile dialog from my silverlight applicaiton I am using below code
Main Button click event :
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");
}
}
XMAL Code :
<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>
This function is calling on a button click. I am wondering that I have a openFiledialog also oon the same page but is opening the dialog successfully without any error. why that savefile dialog is causing an error.
Below is the stack track of the error:
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)
The answer is given here: http://social.msdn.microsoft.com/Forums/en-US/lightswitch/thread/8c6529ab-8967-45e8-9e19-920589b060c1
This is kinda 'security feature':
Basically, you have to open a SaveFileDialog or OpenFileDialog directly in response to a event that is caused by a user action (e.g. Click), which are only raised on the main thread.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With