WPF:Content和DataContext属性之间有什么区别?

Pre*_*cco 7 .net c# wpf

据我了解......

  • DataContext属性
    • "控件使用此属性作为数据源"
    • "是每个框架元素具有的属性,可用于将数据流入屏幕"
    • "DataContext具有范围"
    • "范围是根据DataContext在对象树中的分配位置建立的"
    • "如果在父元素(例如Window)上设置DataContext,该属性将向下流向所有子元素(例如文本框)"
  • 内容属性
    • 此属性具有许多名称,具体取决于正在使用的控件:
      • ContentControl.Content
      • ItemsControl.ItemsSource
      • Items.ItemsSource
      • HeaderedContentControl.Header
      • HeaderedContentControl.Content

所以我的问题是:属性有什么区别ContentDataContext?这里有一个我很遗憾的细微差别.是吗...

  1. DataContext流数据流入UI时,
  2. Content属性的工作是确定(通常是一个绑定)将显示的内容(通过ContentPresenter + ContentTemplate)

示例代码

<Window x:Name="myWindow" DataContext="{Binding ClassA}> 
    <StackPanel> <!-- DataContext is set to ClassA -->

        <!-- DataContext is set to ClassA, ClassA.Name will be displayed -->
        <Label Content="{Binding Name}" />
    </StackPanel>
 </Window>
Run Code Online (Sandbox Code Playgroud)

参考

McG*_*gle 6

DataContext 是WPF中的一个更通用的功能,正如它由低级FrameworkElement类的所有权所暗示的那样.

  • 它参与所有框架元素的绑定,作为默认绑定源.
  • 正如您所提到的,元素的DataContext向下传递给子元素.

Content 更具体:

  • 它是一个特定于一组非常有限的控件的依赖属性(主要是那些继承自ContentControl- 其他控件的控件,例如本身ListBox不拥有Content属性,但在其控件模板中的某处使用 ContentControl).
  • 它不像DataContext那样传递,而是仅仅关注拥有Control及其直接关系(即绑定)
  • 它由用于调用某些内容的控件使用,控件本身不知道或关心将是什么类型的对象.
  • 它经常被用来在cojunction与ContentTemplate-即内容是什么显示,和的ContentTemplate是如何来显示它.(Button就是一个很好的例子.)