我对可重复使用的控件有疑问,我已向您寻求帮助。问题看起来像这样,我创建了一个自定义控件:
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}}}"
这就是检索定义的模板的全部,这里的技巧是获取第一个设置程序的值,即控制模板
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句