WPF のイベントWindow.Loaded
とイベントの違いは何ですか?イベントが最初に呼び出されますか?Window.ContentRendered
ContentRendered
Window.ContentRendered
イベントの説明ここただ言う
ウィンドウのコンテンツがレンダリングされた後に発生します。
Window.Loaded
イベントの説明ここ言う
要素がレイアウトされ、レンダリングされ、操作の準備ができたときに発生します。
MaxHeight
ウィンドウを表示している画面の作業領域の高さにウィンドウを設定したい場合があります。どのイベントで実行すればよいですか?
編集:
探していたものを見つけたと思いますが、さらに混乱しています。Loaded
イベントが最初に発生し、その後にContentRendered
イベントが発生します。Chris SellsとIan Griffithsの著書「Programming WPF」では、イベントLoaded
は
ウィンドウが表示される直前に発生します
'ContentRendered`イベントは
ウィンドウのコンテンツが視覚的にレンダリングされたときに発生します。
これは、イベントに関する MSDN ドキュメントの内容と矛盾していますLoaded
。
要素がレイアウトされ、レンダリングされ、操作の準備ができたときに発生します。
今ではさらに混乱を招いています。
ベストアンサー1
2 つのイベントにはほとんど違いがないと思います。これを理解するために、操作の簡単な例を作成しました。
XAML
<Window x:Class="LoadedAndContentRendered.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="MyWindow"
Title="MainWindow" Height="1000" Width="525"
WindowStartupLocation="CenterScreen"
ContentRendered="Window_ContentRendered"
Loaded="Window_Loaded">
<Grid Name="RootGrid">
</Grid>
</Window>
Code behind
private void Window_ContentRendered(object sender, EventArgs e)
{
MessageBox.Show("ContentRendered");
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MessageBox.Show("Loaded");
}
この場合、メッセージ はLoaded
メッセージの後に最初に表示されますContentRendered
。これにより、ドキュメントの情報が確認されます。
一般に、WPF では、Loaded
次の要素の場合にイベントが発生します。
レイアウトされ、レンダリングされ、操作の準備が整います。
WPF では はWindow
同じ要素ですが、通常はルート パネルに配置されるコンテンツである必要があります (例: Grid
)。したがって、 のコンテンツを監視するにはWindow
、イベントを作成しますContentRendered
。MSDN からのコメント:
ウィンドウにコンテンツがない場合、このイベントは発生しません。
つまり、 を作成するとWindow
、
<Window x:Class="LoadedAndContentRendered.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="MyWindow"
ContentRendered="Window_ContentRendered"
Loaded="Window_Loaded" />
イベントのみ動作しますLoaded
。
内の要素へのアクセスに関してはWindow
、それらは同じように機能します。Label
のメインにGrid
を作成しましょうWindow
。 どちらの場合も、 へのアクセスが正常に取得されていますWidth
。
private void Window_ContentRendered(object sender, EventArgs e)
{
MessageBox.Show("ContentRendered: " + SampleLabel.Width.ToString());
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MessageBox.Show("Loaded: " + SampleLabel.Width.ToString());
}
Styles
およびに関してはTemplates
、現段階では正常に適用されており、これらのイベントでアクセスできるようになります。
たとえば、以下を追加しますButton
:
private void Window_ContentRendered(object sender, EventArgs e)
{
MessageBox.Show("ContentRendered: " + SampleLabel.Width.ToString());
Button b1 = new Button();
b1.Content = "ContentRendered Button";
RootGrid.Children.Add(b1);
b1.Height = 25;
b1.Width = 200;
b1.HorizontalAlignment = HorizontalAlignment.Right;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
MessageBox.Show("Loaded: " + SampleLabel.Width.ToString());
Button b1 = new Button();
b1.Content = "Loaded Button";
RootGrid.Children.Add(b1);
b1.Height = 25;
b1.Width = 200;
b1.HorizontalAlignment = HorizontalAlignment.Left;
}
Loaded
イベントの場合は、の出現時にすぐに にButton
追加します。 イベントの場合は、その内容がすべて出現した後に に追加します。Grid
Window
ContentRendered
Button
Grid
したがって、ロード前にアイテムを追加したり変更したりする場合は、イベントWindow
を使用する必要があります。スクリーンショットを撮るなどLoaded
、コンテンツに関連付けられた操作を実行する場合は、Window
イベントを使用する必要がありますContentRendered
。