这让我疯了,主要是因为在运行时它完美运行(问题只出现在设计时),但我还是决定问,因为我正在做一个大项目,我想以最好的方式实现
第一件事:我有一个来自第三方库的组件,它基本上就像一个边框,它是这样定义的(用F12):
public class AdvancedBorder : ContentControl
我喜欢这个东西的视觉方面,但我需要添加一些功能。所以我创建了一个新的自定义控件:
public class SelectableCard : AdvancedBorder
{
// bunch of custom properties and stuff
static SelectableCard()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(SelectableCard), new FrameworkPropertyMetadata(typeof(SelectableCard)));
}
}
最后我需要保持完全相同的视觉效果但添加一些触发器,所以我把它放在generic.xaml中:
<Style TargetType="{x:Type customControls:SelectableCard}" BasedOn="{StaticResource ResourceKey={x:Type otherLibrary:AdvancedBorder}}">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Style.Triggers>
<Trigger Property="customControls:SelectableCard.IsSelected" Value="True">
<Setter Property="Background" Value="{DynamicResource MyLightBrush}" />
</Trigger>
</Style.Triggers>
</Style>
customControls
是我的命名空间的xmlns,otherLibrary
是第三部分库的xmlns。
一切都在运行时完美运行,并且完全没有错误。在设计时我没有从generic.xaml中得到任何错误,但只要我将SelectableCard放入某个xaml文件中,我就得到了
只能基于具有基本类型的目标类型的Style SelectableCard
我根本没有得到它,特别是因为它在运行时工作。我可以删除BasedOn
属性,但在设计时我不再抱怨,但是我必须为模板添加setter,否则我在运行时看不到任何内容。
我做错了什么,这里?