要素の Loaded イベントにハンドラーをアタッチすると (それが VS デザイナーにあるかコードにあるかに関係なく)、IsLoaded プロパティが true に設定されます。
たとえば、2 つの TabItems を持つ TabControl があります。各 TabItem にボタンがあります。最初の TabItem は既定の項目です (私のウィンドウが表示されたときに選択されます)。2 番目の TabItem の Button には、Loaded イベントがアタッチされています。この場合、最初の TabItem のボタンは IsLoaded が true に設定されており、2 番目の TabItem のボタンは false に設定する必要がありますが、true に設定されています。
Loaded イベントの設定を解除すると、期待どおりに動作します。最初のボタンは IsLoaded が true で、2 番目のボタンは false です。
これはwpfのバグですか、それとも何か間違っていますか?
編集:
例を参照してください。
このコードにより、btn2 の IsLoaded プロパティが True に設定されます (注: btn2_Loaded メソッドは空です)。
XAML:
<Window x:Class="WpfApplication1.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>
<TabControl>
<TabItem Header="Tab1">
<Button x:Name="btn1" Click="btn1_Click" />
</TabItem>
<TabItem Header="Tab2">
<Button x:Name="btn2" Loaded="btn2_Loaded" />
</TabItem>
</TabControl>
</Grid>
</Window>
C#:
private void btn1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this.btn2.IsLoaded.ToString());
}
アプリケーションを起動し、btn1 をクリックします。
Loaded ハンドラーを削除します。
<TabItem Header="Tab2">
<Button x:Name="btn2" />
</TabItem>
アプリケーションを再度起動し、btn1 をクリックします。
IsLoaded が False になりました。なぜこうなった?イベント ハンドラーをアタッチすると、特定の要素が読み込まれますか?