C# 将CustomControl与ContentProperty一起用作BasedOn控件的最佳实践
我有一个C# 将CustomControl与ContentProperty一起用作BasedOn控件的最佳实践,c#,wpf,xaml,C#,Wpf,Xaml,我有一个控件-HtSideBarItem和一个ContentProperty。现在,在80%的情况下,我将CustomButton设置为Content。现在我想创建第二个类HtSideBarButton,它继承默认的样式,并设置默认内容 HtSideBarItem(修整) [ContentProperty(“内容”)] 公共类HtSideBarItem:控件 { 公共数据模板ContentTemplate { get=>(DataTemplate)GetValue(ContentTemplate
控件
-HtSideBarItem
和一个ContentProperty
。现在,在80%的情况下,我将CustomButton
设置为Content
。现在我想创建第二个类HtSideBarButton
,它继承默认的样式
,并设置默认内容
HtSideBarItem(修整)
[ContentProperty(“内容”)]
公共类HtSideBarItem:控件
{
公共数据模板ContentTemplate
{
get=>(DataTemplate)GetValue(ContentTemplateProperty);
set=>SetValue(ContentTemplateProperty,value);
}
公共静态只读DependencyProperty ContentTemplateProperty=DependencyProperty.Register(“ContentTemplate”、typeof(DataTemplate)、typeof(HtSideBarItem));
公共对象内容
{
get=>GetValue(ContentProperty);
set=>SetValue(ContentProperty,value);
}
public static readonly dependencProperty ContentProperty=dependencProperty.Register(“Content”、typeof(object)、typeof(HtSideBarItem));
}
XAML HtSideBarButton
现在,这正如预期的那样工作,但有一个问题。我想要
designTime
数据。但这是不可能的,因为数据模板
。那么,有没有更好的方法来拥有“基本样式”和继承,并使用designTime
data的功能来更改内容?content和ContentTemplate控件。它与ContentControl有何不同?还有更多(大约10个)依赖性属性
,为了清楚起见,我省略了这些属性。你仍然可以从ContentControl派生……你说得对,这是。。但这无论如何也解决不了我的问题。
[ContentProperty("Content")]
public class HtSideBarItem : Control
{
public DataTemplate ContentTemplate
{
get => (DataTemplate) GetValue(ContentTemplateProperty);
set => SetValue(ContentTemplateProperty, value);
}
public static readonly DependencyProperty ContentTemplateProperty = DependencyProperty.Register("ContentTemplate", typeof(DataTemplate), typeof(HtSideBarItem));
public object Content
{
get => GetValue(ContentProperty);
set => SetValue(ContentProperty, value);
}
public static readonly DependencyProperty ContentProperty = DependencyProperty.Register("Content", typeof(object), typeof(HtSideBarItem));
}
<Style TargetType="sideBar:HtSideBarItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sideBar:HtSideBarItem">
<Grid>
<ContentControl Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="sideBar:HtSideBarButton" BasedOn="{StaticResource {x:Type sideBar:HtSideBarItem}}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<controls:CustomButton
Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=sideBar:HtSideBarButton}, Path=Height}"
Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=sideBar:HtSideBarButton}, Path=Text}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>