C# 可重用的自定义控件模板
我对可重复使用的控件有问题,我需要你的帮助。问题如下所示,我创建了一个自定义控件:C# 可重用的自定义控件模板,c#,wpf,templates,custom-controls,C#,Wpf,Templates,Custom Controls,我对可重复使用的控件有问题,我需要你的帮助。问题如下所示,我创建了一个自定义控件: public class ControlExtender : ContentControl { static ControlExtender() { DefaultStyleKeyProperty.OverrideMetadata(typeof(ControlExtender), new FrameworkPropertyMetadata(typeof(ControlExtende
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>
这个扩展程序类创建一个新的弹出窗口。弹出窗口的内容应为自定义控件ControlExtender。在我的XAML代码中,我希望实现如下语句:
p: Extender.ControlTemplate = "{?}"
但是如何在这里指定自定义控件ControlExtender?很抱歉,如果这个问题太琐碎了,但现在我被卡住了。它相当简单
因为您已经定义了目标类型,所以它还充当资源的键
p:Extender.ControlTemplate = "{Binding Setters[0].Value, Source={StaticResource {x:Type controls:ControlExtender}}}"
如果存在诸如在编译时解决问题之类的问题,您也可以使用DynamicSource,这将有效地查找模板
p:Extender.ControlTemplate = "{Binding Setters[0].Value, Source={DynamicResource {x:Type controls:ControlExtender}}}"
这就是检索已定义模板的全部内容,这里的技巧是获取第一个setter的值,即控制模板我想我遗漏了什么。等待让我纠正一下。上面的示例仅检索样式。您是对的!通过您的第一个解决方案,我得到消息:“System.Windows.Style”不是属性“ControlTemplate”的有效值。我也找到了这个解决方案,但您的更正:“绑定Setter[0]。值,源…”得到了很好的解决!非常感谢你!
p:Extender.ControlTemplate = "{Binding Setters[0].Value, Source={DynamicResource {x:Type controls:ControlExtender}}}"