可重用的自定义控件模板
本文关键字:自定义控件 | 更新日期: 2023-09-27 18:11:41
我有一个可重用控件的问题,我需要你的帮助。问题是这样的,我已经创建了一个自定义控件:
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 ?对不起,如果这个问题太微不足道,但现在我卡住了。
这很简单
既然您已经定义了目标类型,那么它也可以作为资源
的键。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}}}"
这就是检索已定义模板的全部内容,这里的技巧是获取第一个setter的值也就是控制模板