У меня есть приложение WPF, которое вызывает OpenFileDialog.ShowDialog. Пока этот диалог открыт, возможно и ожидается, что мое приложение изменит фон и отобразит новую информацию.
Если пользователь теперь закрывает это диалоговое окно, фон восстанавливается, что означает, что на экране имеется старая информация.
Как я могу предотвратить сохранение OpenFileDialog своего фона?
Или, если это невозможно, как я могу принудительно перекрасить мое приложение?
Пример кода, нажмите кнопку и диалоговое окно положения над текстом:
<Window x:Class="BackgroundOfFileOpen.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="10*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Viewbox Grid.Row="0">
<Label Content="{Binding textInBackground}" />
</Viewbox>
<Button Grid.Row="1" Click="OnOpenDialog">Open Dialog</Button>
</Grid>
using Microsoft.Win32;
using System.Windows;
using System.Threading;
using System;
namespace BackgroundOfFileOpen
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public string textInBackground
{
get { return (string)GetValue(textInBackgroundProperty); }
set { SetValue(textInBackgroundProperty, value); }
}
// Using a DependencyProperty as the backing store for textInBackground. This enables animation, styling, binding, etc...
public static readonly DependencyProperty textInBackgroundProperty =
DependencyProperty.Register("textInBackground", typeof(string), typeof(MainWindow), new UIPropertyMetadata("Text"));
public MainWindow()
{
InitializeComponent();
DataContext = this;
function += ModifyText;
}
private void OnOpenDialog(object sender, RoutedEventArgs e)
{
Thread backgroundThread = new Thread(ThreadMethod);
backgroundThread.Start();
OpenFileDialog dlg = new OpenFileDialog();
dlg.ShowDialog();
}
public void ModifyText()
{
if (Dispatcher.CheckAccess())
{
textInBackground += "x";
}
else
{
Dispatcher.BeginInvoke(new Action(() => { ModifyText(); }));
}
}
delegate void ModifyFunction();
static ModifyFunction function;
static void ThreadMethod()
{
Thread.Sleep(1000);
function();
}
}
}