ContentControl有两个属性:
// 摘要: // 获取或设置 System.Windows.Controls.ContentControl 依赖项属性的值。 // // 返回结果: // 一个包含控件内容的对象。默认值为 null。 public object Content { get; set; } // // 摘要: // 获取或设置用于显示 System.Windows.Controls.ContentControl 内容的数据模板。 // // 返回结果: // 用于显示 System.Windows.Controls.ContentControl 内容的数据模板。 public DataTemplate ContentTemplate { get; set; }
Content用来表示其内容,可以是控件控件笔刷文字等内容,ContentTemplate为DataTemplate类型的模板,其为显示效果。
Control和FrameElement的去别在于前者有Template属性。
<Button Content="Click me!" HorizontalAlignment="Center" VerticalAlignment="Center"> <Button.Style> <Style TargetType="Button"> <Setter Property="BorderBrush" Value="{StaticResource PhoneAccentBrush}" /> <Setter Property="BorderThickness" Value="6" /> <Setter Property="Background" Value="{StaticResource PhoneChromeBrush}" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="12"> <ContentPresenter Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" /> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </Button.Style> </Button>
ContentPresenter刚好对应control中的两个属性Content和ContentTemplate。object类型的Content与其相一致,当button中的属性不会受ContentPresenter的控制时,
说明Button的属性是本身的熟悉,需要绑定。如ForeGround,是字体的属性,直接就在Content里面一起绑定了。如BackGround是Button的属性,非内容属性。
/// <summary> /// 遍历指定的UIControl里面的元素——引用方式DumpVisualTree(listBox, 0); /// </summary> /// <param name="parent"></param> /// <param name="indent"></param> void DumpVisualTree(DependencyObject parent, int indent) { TextBlock txtblk = new TextBlock(); txtblk.Text = String.Format("{0}{1}", new string(' ', 4 * indent), parent.GetType().Name); dumpTreeItemsControl.Items.Add(txtblk); int numChildren = VisualTreeHelper.GetChildrenCount(parent); for (int childIndex = 0; childIndex < numChildren; childIndex++) { DependencyObject child = VisualTreeHelper.GetChild(parent, childIndex); DumpVisualTree(child, indent + 1); } }