我需要有一個PNG(帶有透明度)作爲初始屏幕。圖像的透明部分應該清晰,以便用戶可以看到它後面的任何窗口(或桌面)。WPF初始屏幕窗口
我還需要顯示啓動畫面5秒(合同特別說5秒),它不能更短。我知道VS 2010中的構建屬性,但啓動畫面來得太快(少於5秒)。
我能做些什麼,使之叉5秒(約)
我需要有一個PNG(帶有透明度)作爲初始屏幕。圖像的透明部分應該清晰,以便用戶可以看到它後面的任何窗口(或桌面)。WPF初始屏幕窗口
我還需要顯示啓動畫面5秒(合同特別說5秒),它不能更短。我知道VS 2010中的構建屬性,但啓動畫面來得太快(少於5秒)。
我能做些什麼,使之叉5秒(約)
我有一個類似的問題,我無法使用內置的splashscreen選項,在WPF項目上。
該項目現在是開源的,你看看這裏:https://code.google.com/p/theomniscientchimp/
這是一個自動更新(有你不需要我猜幾樣東西)。
這是你應該需要最低:
WPF的一面:
<Window x:Class="TheOmniscientChimp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CustomXaml"
Icon="SC2_Replay_Monkey.ico"
Title="MainWindow" Height="256" Width="456" Background="#00005555" AllowsTransparency="True" WindowStyle="None" WindowStartupLocation="CenterScreen" >
<Grid Width="Auto">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Image Name="splashScreenImage" Stretch="Fill" Grid.Row="0" />
</Grid>
</Window>
C#側(代碼後面):
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
BitmapImage splashScreenImageSource = new BitmapImage();
splashScreenImageSource.BeginInit();
splashScreenImageSource.UriSource = new Uri("Your_Image.png", UriKind.Relative);
splashScreenImageSource.EndInit();
splashScreenImage.Source = splashScreenImageSource;
}
public void AsynchronousExit()
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
//Makes the thread wait for 5s before exiting.
Thread.Sleep(5000);
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Environment.Exit(0);
}
}
告訴我,如果你需要幫助的調整。
FB。
此代碼是否與MailApplication一起使用,還是創建新的WPF窗口並將代碼(XAML/C#)添加到新窗口? – 2011-06-08 17:31:41
Mail = Main。這是一個錯字 – 2011-06-08 19:01:51
我是在一個單獨的項目中製作的,但您可以將它放在主應用程序中,並在應用程序啓動之前調用它。 – 2011-06-14 11:47:58
你可能不得不做一些類似你在的WinForms做什麼東西。啓動一個新線程並在該線程上啓動一個Wpf應用程序。在WinForms中,您可以通過使用System.Windows.Forms.Application.Run(new SplashForm())來完成此操作;在Wpf中應該類似於這個。
編輯: 我發現這個,所以它應該工作。 http://msdn.microsoft.com/en-us/library/ms597011.aspx
關鍵是要在一個單獨的線程上做到這一點。應用程序啓動的線程已經綁定到一個WPF應用程序,並且您希望您的splash基本上成爲它自己的GUI。然後,表單可以有一個計時器,使其自動關閉,這應該會自動終止這個其他應用程序。
如果我不得不這樣做,我會添加一個窗口,並設置其屬性AllowsTransparency = true;
將其設置爲加載此之前,各種形式的我的意思是之前啓動可以通過修改App.xml
來完成,並設置Startup="Application_Startup
要禁用你有頂部defauld控制設置WindowStyle = none
而且在其代碼
private void Application_Startup(object sender, StartupEventArgs e)
{
MainWindow mn = new MainWindow();
mn.ShowDialog();
}
使用定時器做你想做什麼都
private DispatcherTimer timer;
timer = new DispatcherTimer();
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = TimeSpan.FromMilliseconds(5000);
timer.IsEnabled = true;
void timer_Tick(object sender, EventArgs e)
{
///Close your window here
}
希望這有助於
我有同樣的問題,的擊打它實際上是令人驚訝容易解決沒有什麼特別的東西:
中添加圖片到主項目,並設置構建屬性爲閃屏。
的InitializeComponents()調用前添加一個Thread.sleep代碼(5000)到構造你的應用程序的主窗口。
這會耽誤你的主WPF窗口的加載和啓動畫面會熬夜至少加載時間+睡眠時間的主窗口彈出和飛濺消失之前。
如果你想使用一個啓動畫面窗口,使用後臺工作,你讓你的主代碼更復雜,因爲它是沒有必要的。解決方案是在主UI線程中將主代碼作爲正常的同步代碼樣式編寫,同時顯示啓動窗口,直到關閉它爲止,並且可以發送更新以更改啓動屏幕加載文本或進度條。
SplashWindow window = null;
var thread = new Thread(new ThreadStart(() =>
{
Debug.Print("Thread begin");
window = new SplashWindow();
window.ShowDialog();
}));
thread.Name = "RunSplashWindow";
thread.SetApartmentState(ApartmentState.STA);
thread.IsBackground = true;
thread.Start();
Debug.Print("App begin");
Thread.Sleep(1000);
if (window != null)
{
window.Dispatcher.BeginInvoke(new Del(() => {
window.SetHeader("Running...");
}), new object[0]);
}
Thread.Sleep(1000);
for (int i = 1; i <= 100; i++)
{
if (window != null)
{
window.Dispatcher.BeginInvoke(new Del(() =>
{
window.SetProgress((double)i);
}), new object[0]);
}
Thread.Sleep(10);
}
Thread.Sleep(1000);
Debug.Print("App end");
if (window != null)
{
window.Dispatcher.BeginInvoke(new Del(() =>
{
window.Close();
}), new object[0]);
}
怎麼樣了Thread.Sleep(5000);? :) – Reniuz 2011-06-07 17:08:22
對於透明的PNG,您需要類似Photoshop或Illustrator的東西來保存Alpha通道信息。 – Stonetip 2011-06-07 17:10:27
至於啓動畫面,您可能需要添加某種自定義彈出窗口。如果用戶可以點擊複選框而不必再次顯示它,那將會很好。但我懷疑合同會允許!似乎太多的公司寧願疏遠用戶,只要他們的營銷。 – Stonetip 2011-06-07 17:12:30