与此相对,ContentControl则只能包含单个子元素。 在UWP中,Button、CheckBox、ScrollViewer、Frame、ToolTip等都继承自ContentControl,其它控件则不是在ContentTemplate中使用ContentControl ,就是被ContentControl使用,可以说ContentControl是UWP中最重要的控件。 <StackPanel> <ContentControl> <AdaptiveTrigger /> </ContentControl> <ContentControl <ContentControl x:Name="ContentControl"> <ContentControl.ContentTransitions> <TransitionCollection
ContentControl是最简单的TemplatedControl,而且它在UWP出场频率很高。 ContentControl和Panel是VisualTree的基础,可以说几乎所有VisualTree上的UI元素的父节点中总有一个ContentControl或Panel。 因为ContentControl很简单,如果只实现ContentControl最基本功能的话很适合用来做TemplatedControl的入门。 这次的内容就是模仿ContentControl实现一个模板化控件MyContentControl,直接继承自Control。 1. 2.2 ContentPresenter ContentPresenter用于显示内容,默认绑定到ContentControl的Content属性。
ContentControl是WPF中最基础的一种控件,Window、Button、ScrollViewer、Label、ListBoxItem等都继承自ContentControl。 而且ContentControl的结构十分简单,很适合用来入门自定义控件。 这篇文章通过自定义一个ContentControl来介绍自定义控件的一些基础概念,包括自定义控件的基本步骤及其组成。 2. ,它继承自ContentControl并添加了一些细节。 但如果换成下面这段XAML: <ContentControl> <TextBox /> </ContentControl> <ContentControl> <TextBox /> </ ContentControl> ?
虽然没看过ContentControl的源码,但我了解到如果ContentPresenter在ContentControl的ControlTemplate中,当ContentPresenter的Content 为Null时会默认将自己的Content的绑定到ContentControl的Content。 3.1 使用ContentControl 使用ContentControl代替Header的ContentPresenter是最简单直接的解决方案。 我常常用ContentControl代替ContentPresenter,这没什么不好的。 (因为在WPF中ContentPresenter比ContentControl少了一大堆文本相关的属性,所以在WPF常常这么做。)
</Setter> </DataTrigger> </Style.Triggers> </Style> <Style x:Key="Sty.JudgeFlip.H.<em>ContentControl</em>.BindUc " TargetType="<em>ContentControl</em>"> <Setter Property="LayoutTransform"> <Setter.Value> " TargetType="ContentControl"> <Setter Property="LayoutTransform"> <Setter.Value> Sty.JudgeFlip.H.ContentControl.BindUc 和 Sty.JudgeFlip.H.ContentControl.BindUc 都是作用于 ContentControl;前者绑定判断用户控件的 针对于 ContentControl 的样式,内部使用的是 LayoutTransform 而不是 RenderTransform,是考虑到 RenderTransform 可能 ContentControl
可以来定制 可以使用 ContentControl 的 Content 属性放入任意的 UIElement 都可以加入视觉树 <Style TargetType="local:Board"> ", Type = typeof(ContentControl))] public sealed class Board : Control 是否记得在 Board 的资源字典就写了一个 ContentControl ) GetTemplateChild("ContentControl"); _grid = new Grid() { Children 本文的控件是不需要重新布局的方法,现在看起来的控件的代码请看下面 [TemplatePart(Name = "ContentControl", Type = typeof(ContentControl ) GetTemplateChild("ContentControl"); _grid = new Grid() { Children
但在 Xaml 上直接写 ItemsSource="somestring"` 会报错,可以用 ContentControl 包装一下,写成这样: <ContentControl Content="111111111111 "> <ContentControl.ContentTemplate> <DataTemplate> <ItemsControl ItemsSource= > </ContentControl> 这样 UI 上就会重复创建 12 个 Rectangle,然后设置 ItemsControl 的 ItemsPanel,让这些 Rectangle 按着圆形布局。 "> <ContentControl.OpacityMask> <VisualBrush Stretch="None" Visual="{Binding ElementName =Border}" /> </ContentControl.OpacityMask> 5.
contentControl; ContentPresenter contentPresenter; if ((contentControl = element as ContentControl = null) { contentControl.Content = item; contentControl.ContentTemplate = ItemTemplate contentControl; ContentPresenter contentPresenter; if ((contentControl = element as ContentControl) ! = null) { contentControl.Content = item; contentControl.ContentTemplate
dx:DXTabItem Header="{Binding Region[0]}" Visibility="{Binding TabPageDispaly[0]}"> <ContentControl dx:DXTabItem Header="{Binding Region[1]}" Visibility="{Binding TabPageDispaly[1]}"> <ContentControl dx:DXTabItem Header="{Binding Region[2]}" Visibility="{Binding TabPageDispaly[2]}"> <ContentControl DXTabControl.ItemHeaderTemplate> <dx:DXTabControl.ItemTemplate> <DataTemplate> <ContentControl
为了可以显示内容模仿ContentControl实现了Content属性,因为不是直接继承ContentControl,所以要为控件添加[ContentProperty(Name = nameof(Content 模仿ContentControl的部分代码可见 了解模板化控件(2):模仿ContentControl 。 3.2.1 ContentControlStyle <Style TargetType="<em>ContentControl</em>" x:Key="ContentElementStyle"> /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="<em>ContentControl</em> > </ControlTemplate> </Setter.Value> </Setter> </Style> <Style TargetType="ContentControl
但在 Xaml 上直接写 ItemsSource="somestring"` 会报错,可以用 ContentControl 包装一下,写成这样: <ContentControl Content="ItemsControl " > <ContentControl.Template> <ControlTemplate TargetType="<em>ContentControl</em>"> < ItemsSource="{TemplateBinding Content}" > </ItemsControl> </ControlTemplate> </ContentControl.Template > </ContentControl> 然后设置 ItemsControl 的 ItemsPanel,让内容横向排列;设置 DataTemplate,让拆分后的字符显示在 TextBlock 上: <ItemsControl
; set => SetValue(ContentProperty, value); } } 在控件模板中用一个 CornerRadius 很大的 Border 模仿圆形边框,ContentControl BorderThickness="1" CornerRadius="100"> <ContentControl x:Name="ContentControl" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment <ContentControl x:Name="CompletedElement" Template="{StaticResource CompletedTemplate Duration="0:0:0.6" /> </animations:Implicit.ShowAnimations> </ContentControl
StrokeThickness="2"
Stroke="RoyalBlue" />
<ContentControl x:Name="ContentControl2"
Height="{Binding Progress,Source={StaticResource ProgressWrapper IValueConverter
{
///
首先想到最简单的方法,就是自定义一个HeaderedContentControl,如名字所示,这个控件继承自ContentControl并拥有Header属性,用起来大概是这样: <HeaderedContentControl HeaderedContentControl只需要在继承ContentControl后添加两个属性:Header和HeaderTemplate。 public class HeaderedContentControl : ContentControl { public HeaderedContentControl() { x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.14393.0\Generic\generic.xaml中找到ContentControl
<ContentPresenter Content="{TemplateBinding <em>ContentControl</em>.Content }" ContentTemplate="{TemplateBinding <em>ContentControl</em>.ContentTemplate} " ContentStringFormat="{TemplateBinding <em>ContentControl</em>.ContentStringFormat
DynamicResource BackgroundBrush}" BorderBrush="{DynamicResource BorderBrush}"></hc:TextBox> <ContentControl DataContext="{Binding ElementName=lbx_devices,Path=SelectedItem}" Name="DeviceContent"></ContentControl > </ContentControl> <TextBlock Text="继电器控制" Foreground > </ContentControl> <ToggleButton x:Name="check_switch > </<em>ContentControl</em>> <TextBlock Text="配置项下发" Foreground
wrap_content" android:layout_alignParentBottom="true" /> </RelativeLayout> 在这布局里好包含着一个布局就是contentcontrol.xml 文件,由于此文件有点多并且也简单所以就不列出来,详细到时可看源码,contentcontrol.xml的界面效果是 ? //初始化底部视图 Contentshow=(LinearLayout)findViewById(R.id.contentshow); //初始化contentcontrol 的各个部分 contentcontrolshow=(RelativeLayout)findViewById(R.id.contentcontrol_show); contentcontrolmenu=(LinearLayout)findViewById(R.id.contentcontrol_menu); contentcontrolbu
使用样式中的资源来简化样式的继承 也就是在 Style.Resources 中放置针对于 ControlTemplate 内某个或某几个元素的样式,然后在继承的样式中只需要提供另外的针对性样式即可: 二、ContentControl.ContentStringFormat 答案就是使用 ContentControl.ContentStringFormat 进行设置: ContentControl.ContentStringFormat 的定义如下: 三、自定义依赖属性 ContentStringFormat 上一节使用 ContentControl.ContentStringFormat 确实是可以的,不过我们既然是自定义控件了,还借用别人的依赖属性,多没面子呀,而且使用这个自定义控件的人也不一定知道可以用那个属性呀
Border.Effect> <DropShadowEffect BlurRadius="8" ShadowDepth="0" /> </Border.Effect> <ContentControl Border.Effect> <DropShadowEffect BlurRadius="8" ShadowDepth="0" /> </Border.Effect> <ContentControl > <DropShadowEffect BlurRadius="8" ShadowDepth="0" /> </Border.Effect> <ContentControl
<Button.Template> <ControlTemplate x:Name="ctSure"> <ContentControl Source="/Oland.HSS.InHospital;component/Pictures/maintenance/1.png"></Image> </ContentControl