Silverlight 不可见的tabitems不在Visual Tree中
项目中发现一个问题,有个界面的Loaded事件被多次触发。
经过测试发现,这个界面在一个tabitem中,每次切换到这个page时,都会触发Loaded事件。
写个demo测试下
<navigation:Page x:Class="SilverlightApp.Tab.Page1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" d:DesignWidth="640" d:DesignHeight="480" Title="Page1 Page" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"> <Grid x:Name="LayoutRoot"> <sdk:TabControl Height="266" HorizontalAlignment="Left" Margin="80,84,0,0" Name="tabControl1" VerticalAlignment="Top" Width="402"> <sdk:TabItem Header="tabItem1" Name="tabItem1" > <TextBlock x:Name="txtBlk1" Text="tab item 1" Loaded="txtBlk1_Loaded" Unloaded="txtBlk1_Unloaded" /> </sdk:TabItem> <sdk:TabItem Header="tabItem2" Name="tabItem2"> </sdk:TabItem> </sdk:TabControl> </Grid> </navigation:Page>
Code Behind
public partial class Page1 : Page { public Page1() { InitializeComponent(); } private void txtBlk1_Loaded(object sender, RoutedEventArgs e) { Debug.WriteLine("text block loaded"); } private void txtBlk1_Unloaded(object sender, RoutedEventArgs e) { Debug.WriteLine("text block unloaded"); } }
切换两个tabpage就会发现,textblock在不可见是会触发Unloaded事件,可见是会触发Loaded事件。
更详细的demo可以参考 这篇 文章。 当textblock不可见时,它根本就不在visual tree中。
posted on 2012-10-22 09:57 YanYangjiang 阅读(263) 评论(0) 收藏 举报