私はこの質問を明確に得ていませんが、質問を得ることができる限りこの答えを出そうとしました.:-)
私のシナリオでは、ボタンのクリックで時間のかかるコントロールをロードする 1 つのメイン ウィンドウを作成しました。時間のかかるコントロールをロードしている間、10 秒間スリープ状態を維持しました。
メイン ウィンドウ コード:
Xaml -
<Window x:Class="Wpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Wpf"
Title="MainWindow" Height="350" Width="525"
x:Name="root">
<Window.Resources>
<DataTemplate x:Key="loadingTemplate" DataType="ContentControl">
<StackPanel>
<TextBlock Text="Loading..." Margin="5"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<StackPanel x:Name="stpRootLayout">
<Button Content="Click to load pane" Click="Button_Click"/>
<Border BorderThickness="5" BorderBrush="Black" Height="100">
<ContentControl x:Name="cctPlaceHolder">
</ContentControl>
</Border>
</StackPanel>
Xaml.cs -
public delegate void LoadTimeConsumingControlDelegate();
public void LoadTimeConsumingControl()
{
//set our progress dialog text and value
cctPlaceHolder.Content = new TimeConsumingControl();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
BackgroundWorker worker = new BackgroundWorker();
cctPlaceHolder.ContentTemplate = this.TryFindResource("loadingTemplate") as DataTemplate;
System.Windows.Threading.Dispatcher cctDispatcher = cctPlaceHolder.Dispatcher;
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
LoadTimeConsumingControlDelegate update = new LoadTimeConsumingControlDelegate(LoadTimeConsumingControl);
cctDispatcher.BeginInvoke(update);
};
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
cctPlaceHolder.ContentTemplate = null;
};
worker.RunWorkerAsync();
}
時間のかかるコントロール:
Xaml -
<UserControl x:Class="Wpf.TimeConsumingControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBlock Text="some text..................................................................................................."/>
</Grid>
Xaml.cs
public TimeConsumingControl()
{
InitializeComponent();
Thread.Sleep(10000);
}
データ テンプレートを読み込み中のテーマに置き換えます。
これがあなたが探していたものであることを願っています。そうでない場合は、私に連絡してください。