可重用的CustomControl模板

彼得70

我对可重复使用的控件有疑问,我已向您寻求帮助。问题看起来像这样,我创建了一个自定义控件:

public class ControlExtender : ContentControl
{
    static ControlExtender()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(ControlExtender), new FrameworkPropertyMetadata(typeof(ControlExtender)));
    }

    public override void OnApplyTemplate()
    {
    }
}

另外我有一个ControlTemplate

<Style TargetType="{x:Type controls:ControlExtender}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    ...content....
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我创建了一个附加类,其中包含一些AttachedProperties。其中之一是:

public class Extender
{
    public static readonly DependencyProperty ControlTemplateProperty = DependencyProperty.RegisterAttached(
        "ControlTemplate", 
        typeof(ControlTemplate), 
        typeof(Extender), 
        new FrameworkPropertyMetadata(
            null, 
            MetadataOptions, 
            OnControlTemplateChanged, 
            CoerceRadingControlTemplate));

    public static ControlTemplate GetControlTemplate(UIElement element)
    {
        return (ControlTemplate)element.GetValue(ControlTemplateProperty);
    }
    public static void SetControlTemplate(UIElement element, ControlTemplate value)
    {
        element.SetValue(ControlTemplateProperty, value);
    }

这个Extender类创建一个新的弹出窗口。弹出窗口的内容应为自定义控件ControlExtender。在我的XAML代码中,我想实现如下语句:

p: Extender.ControlTemplate = "{?}" 

但是,如何在此处指定自定义控件ControlExtender?抱歉,这个问题太琐碎了,但现在我被困住了。

Pushpraj

这很简单

因为您已经定义了目标类型,所以它也充当了资源的键

p:Extender.ControlTemplate = "{Binding Setters[0].Value, Source={StaticResource {x:Type controls:ControlExtender}}}" 

如果存在诸如在编译时解决的问题,您也可以使用DynamicResource,这将有效地寻找模板

p:Extender.ControlTemplate = "{Binding Setters[0].Value, Source={DynamicResource {x:Type controls:ControlExtender}}}"

这就是检索定义的模板的全部,这里的技巧是获取第一个设置程序的值,即控制模板

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django模板可重用性

来自分类Dev

可重用Django App中的基本模板

来自分类Dev

Django-从javascript附加可重用模板

来自分类Dev

如何使包含UILabels的可重用UIView模板

来自分类Dev

在Django中创建可重用模板

来自分类Dev

在Django中创建可重用模板

来自分类Dev

可重用Django应用的模板未呈现

来自分类Dev

Play Framework模板中模板之间的可重用功能

来自分类Dev

为什么没有针对Django的DetailView的可重用模板?

来自分类Dev

跨多个组件的可重用模板/ html代码段

来自分类Dev

WPF如何使用模板编写可重用的派生控件

来自分类Dev

如何使用XAML中的通用模板/控件创建可重用控件并设置嵌套控件的属性

来自分类Dev

Angular:如何为动态上下文和功能创建可重用的布局或模板?

来自分类Dev

如何使用XAML中的通用模板/控件创建可重用控件并设置嵌套控件的属性

来自分类Dev

Node.JS/Express 视图中页眉/页脚/可重用模板的最佳实践?

来自分类Dev

重用数据模板

来自分类Dev

重用样式和模板

来自分类Dev

iOS可重用组件

来自分类Dev

类的可重用代码

来自分类Dev

可重用的搜索方法

来自分类Dev

OptionalInt可重用吗?

来自分类Dev

可重用的对象文字

来自分类Dev

可重用的表达

来自分类Dev

可重用的搜索方法

来自分类Dev

可重用的 Angularjs 代码

来自分类Dev

使我的功能可重用

来自分类Dev

Laravel 可重用的函数

来自分类Dev

可重用函数类型

来自分类Dev

当包含在use方法调用的水平可重用模板中时,如何访问嵌套块内for循环定义的变量