【发布时间】:2011-07-28 07:00:19
【问题描述】:
我有一个调用 OpenFileDialog.ShowDialog 的 WPF 应用程序。当此对话框打开时,我的应用程序可能会改变背景并显示新信息。
如果用户现在关闭此对话框,则背景会恢复,这意味着屏幕上有旧信息。
如何防止 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();
}
}
}
【问题讨论】:
-
也许你应该分享一些代码来清除。
-
在原始帖子中添加了示例代码
标签: .net wpf background openfiledialog