WPF FrameworkElement

时间:2009-03-04 12:05:32

标签: c# .net wpf frameworkelement

我是WPF编程模型的新手。我几乎没有疑问:

  1. XAML中的页面标记(在XBAP应用程序中)是否为FrameworkElement类型?

  2. 如果我有一个子元素让我们说一个页面内的框架。我将该框架元素传递给另一个程序集中的函数。现在我尝试从Frame控件的Parent属性导航回Page,我无法获得对Page的引用?有什么想法吗?


  3. 我在另一个程序集中使用的函数来获取子控件的父页面

    Page getTopParent(FrameworkElement f) 
    { 
        FrameworkElement ct = f; 
    
        while (true) 
        { 
            if (ct is Page) 
            { 
                break; 
            } 
    
            ct = (FrameworkElement)
            ct.Parent; 
        } 
        return ct as Page; 
    }
    

    Please find example XAML
    

                                                                                                                                                                                                                                               < / DataTrigger>                     < /DataTemplate.Triggers> - >                 

            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <StackPanel HorizontalAlignment="Left">
                        <Frame Name="tabContent" Height="520" Width="820" local:WebBrowserBehavior.Source="{Binding Path=CurrentPage}" ContentRendered="tabItem_contentRendered"/>
                    </StackPanel>
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>
        <StackPanel Orientation="Horizontal" Name="taskBar" Height="34" VerticalAlignment="Bottom">
            <Button Height="23" Name="helpButton" Width="43" Content="Help" Click="helpButton_Click"/>
        </StackPanel>
    </StackPanel>
    

2 个答案:

答案 0 :(得分:1)

  1. 是的,Page继承自FrameworkElement
  2. 有时候上树并不像简单地检查父项那么容易,特别是如果你正在使用模板。如果使用模板,则需要使用Parent属性向上运行树,直到它为空。然后,使用TemplatedParent属性。您可以使用两者的组合向上走逻辑树。话虽这么说,WPF为这种情况提供了辅助方法。查看LogicalTreeHelper.GetParent

答案 1 :(得分:0)

  1. 是的,就像XAML中的其他内容一样。转到here获取官方文档。