0

私はSilverlightの初心者です。

コンテンツが読み込まれるフレームを持つ Page を使用して、一種のマスター ページを作成しました。一度に複数の UserControls を処理するため (1 つだけが表示されますが、以前に開いた状態を維持したい)、Navigate メソッドの代わりに Content プロパティを設定しています。そうすれば、UserControl を割り当てることができます (UserControl への Uri で Navigate を使用するため、新しいものではなく、既に作成されています)。

ここで、内容が変化したフレームから、このように写真を撮りたいと思います。コンテンツが設定されたときにすぐに実行すると、数秒かかるため、UserControl は画像に表示されません。フレームには Navigated イベントがありますが、Content プロパティでは発生しません (名前が示すように、Navigate メソッドが使用されたときに発生するだけです)。

新しいコンテンツがロードされたことを知るにはどうすればよいですか?

それが役立つ場合は、Silverligh 5 を使用しています。

4

1 に答える 1

0

解決策はありますが、あまり気に入らないので、まだ他の方法を探しています。

public class CustomFrame : Frame
{
    private readonly RoutedEventHandler loadedDelegate;

    public static readonly DependencyProperty UseContentInsteadNavigationProperty =
        DependencyProperty.Register("UseContentInsteadNavigation", typeof (bool), typeof (CustomFrame), new PropertyMetadata(true));

    public bool UseContentInsteadNavigation
    {
        get { return (bool)GetValue(UseContentInsteadNavigationProperty); }
        set { SetValue(UseContentInsteadNavigationProperty, value); }
    }

    public CustomFrame()
    {
        this.loadedDelegate = this.uc_Loaded;
    }

    public new object Content
    {
        get { return base.Content; }
        set
        {
            if (UseContentInsteadNavigation)
            {
                FrameworkElement fe = (FrameworkElement)value;
                fe.Loaded += loadedDelegate;
                base.Content = fe;
            }
            else
            {
                base.Content = value;
            }
        }
    }

    void uc_Loaded(object sender, RoutedEventArgs e)
    {
        ((UserControl)sender).Loaded -= loadedDelegate;
        OnContentLoaded();
    }

    public delegate void ContentLoadedDelegate(Frame sender, EventArgs e);
    public event ContentLoadedDelegate ContentLoaded;

    private void OnContentLoaded()
    {
        if (ContentLoaded != null)
            ContentLoaded(this, new EventArgs());
    }
}
于 2012-04-17T18:27:08.163 に答える