首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从ContentControl开始入门自定义控件

ContentPresenter ContentPresenter用于显示内容,默认绑定到ContentControl的Content属性。...除了可继承值的属性,需要适当地将ControlTemplate中的元素属性绑定到所属控件的属性,例如Margin="{TemplateBinding Padding}",这样可以方便控件的使用者通过属性调整...结果就如上面截图显示,第二个TextBox没有获得焦点,焦点被包含它的ContentControl获取了,要再按一次 Tab TextBox才能获得焦点。...依赖属性的默认值可以在注册依赖属性时在PropertyMetadata中设置,通常为属性类型的默认值,也可以在DefaultStyle的Setter中设置,不推荐在构造函数中设置。...结语 虽然尽量精简,但结果这篇文章仍是太长,而且很多关键的技术仍未介绍到。 更深入的内容会在后续文章中逐渐介绍,敬请期待。 8.

4.1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    了解模板化控件(2):模仿ContentControl

    这次的内容就是模仿ContentControl实现一个模板化控件MyContentControl,直接继承自Control。 1....在UWP中如无特殊需求,Content、Header、Title等内容属性最好都是Object类型,这样更方便扩展,例如可以在Header放一个Checkbox,这是很常见的做法。 2....2.2 ContentPresenter ContentPresenter用于显示内容,默认绑定到ContentControl的Content属性。...但它们之间有如下不同: TemplateBinding只能用在ControlTemplate中。 TemplateBinding的源和目标属性都必须是依赖属性。...除了可属性值继承的属性,需要适当地将ControlTemplate中的元素属性绑定到所属控件的属性,例如Margin="{TemplateBinding Padding}",这样可以方便控件的使用者通过属性调整

    68420

    win10 uwp 自定义控件入门

    虽然现在设置好了控件的 xaml 但是现在的 xaml 没有内容,需要在 Board 类添加一些代码,让大家可以看到自己的 xaml 是否可以在 Board 使用 首先是添加 TemplatePart..."); if (foo == null) { throw new ArgumentException("使用的模板不包含"...也就是一个节点只处理这个节点的子节点,而不处理子节点的子节点,所以 UWP 的布局就依赖这个视觉树,通过布局子节点的方式,然子节点自己递归这个布局方法,布局子节点的子节点。 那么布局是什么?...本文的控件是不需要重新布局的方法,现在看起来的控件的代码请看下面 [TemplatePart(Name = "ContentControl", Type = typeof(ContentControl...Content.Content = _grid; base.OnApplyTemplate(); } } 在界面添加这个控件然后运行一下,可以看到界面居中显示了这个控件

    90320

    模仿哔哩哔哩的一键三连

    下面这些是一键三连的核心功能: 可以控制并显示进度 有普通状态和完成状态 可以点击或长按 当切换到完成状态时弹出写泡泡 点击切换状态 长按 2 秒钟切换状态,期间有进度显示 这篇文章将介绍如何使用自定义控件实现上面的功能...Border 模仿圆形边框,ContentControl 显示 Content,RadialProgressBar 显示进度,控件模板的大致结构如下: ControlTemplate TargetType...我从以前的代码里抄来状态相关的代码。虽然定义了这么多状态备用,其实我也只用到 Idle 和 Completed,其它要用到的话可以修改 ControlTemplate。...在控件模板中添加一个粉红色的带一个同色阴影的圆形背景,其它状态下隐藏,在切换到 Completed 状态时显示。为了好看,还添加了 ImplictAnimation 控制淡入淡出。...最后 很久没有认真写 UWP 的博客了,我突然有了个大胆的想法,在这个时间点,会不会就算我胡说八道都不会有人认真去验证我写的内容?毕竟现在写 UWP 的人又不多。

    1.1K20

    合体姿势不对的HeaderedContentControl

    以前的问题 在WPF中,HeaderedContentControl是Expander、GroupBox、TabItem等诸多拥有Header属性的控件的基类,虽然很少直接用这个控件,它的存在也有一定价值...每个有Header属性的控件都既没有继承HeaderedContentControl,也没有使用HeaderedContentControl作为外层容器包装自己的内容,而是全都单独实现这个属性。...仔细观察就会发现TextBox等控件的Header是有一个0,0,0,8的Margin,可是HeaderedContentControl并没有这样设置,结果HeaderedContentControl就会出现高度不匹配的问题...NormalName : DisabledName, useTransitions); } ControlTemplate中需要包办Disabled状态,HeaderedContentControl中订阅自身的...UpdateVisibility()以决定HeaderContentPresenter是否显示。

    91330

    做个调皮的BusyIndicator

    通常它派生自ContentControl并提供public bool IsBusy{ get; set; }属性,当设置IsBusy=True时将Content.IsEnabled设置成False,并显示...另外,虽然BusyIndicator的ControlTemplate已经够精简了,为了方便将来修改我再进一步简化了XAML,结果如下: ContentControl x:Name="content"...其实我个人不是很喜欢IsBusy就将Content.IsEnabled设置成False这么简单粗暴,因为这样内容会变成灰色。而且busyContent显示的过程应该是个透明度渐变的过程。...而且ControlTemplate中ProgressRing和Overlay的父元素是一个叫busyContent的Grid,但BusyContent(注意大小些)是BusyIndicator的一个属性...,内容是Busy状态下显示的文字内容,这样很容易让人混淆。

    90850

    理解及扩展Expander

    Expander控件是一个ContentControl,它通过IsExpanded属性或者通过点击Header中的ToggleButton控制内容展开或隐藏。...TemplatePart表明ControlTemplate中应该包含名为PART_ExpanderToggleButton的ToggleButton、名为PART_RootGrid的Grid及名为PART_LayoutTransformer...即使ControlTemplate中没按TemplatePart和TemplateVisualState的要求定义,Expander也不会报错,只是会缺失部分功能。...IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" /> 另一个常见的做法是通过代码直接控制内容是否显示...之所以不直接改变ContentPresenter的高度是不想改变它的内容高度。另外我也改变了PART_ExpanderToggleButton的动画效果,我有点讨厌鼠标按下时文字会变模糊这点。

    87020
    领券