- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我在 Visual Studio 中创建自定义控件时,会自动添加一个静态构造函数:
static MyListBoxItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyListBoxItem), new FrameworkPropertyMetadata(typeof(MyListBoxItem)));
}
风格
<Style TargetType="{x:Type c:MyListBoxItem}">
<Style.Resources>
<!--SelectedItem with focus-->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />
</Style.Resources>
</Style>
然后给出一个空的布局。没有静态构造函数中的代码,布局是正确的。只要您不将 OverridesDefaultStyle
设置为 true。
当我将 BasedOn="{StaticResource {x:Type ListBoxItem}}"
添加到 Style 时,无论是否使用静态构造函数代码,布局都是正确的。 OverridesDefaultStyle
不再有效。
我希望自定义控件的样式默认为基本类型的样式。在我看来,静态构造函数中的代码似乎可以省略。
但是为什么会默认生成呢?
最佳答案
来自 MSDN页:
A control typically overrides the default value of this property to be its own type, but in some cases could also use a base type for which a style in the theme dictionaries exists. This is only practical if the control templates of the base control entirely define the visual representation of that derived control, and if whatever additional members the derived types expose do not require additional elements as part of the control template.
在您的情况下,您希望自定义控件默认使用基本控件样式。要实现这一点,您必须从静态构造函数中删除该行,或者将其替换为以下行以指示您想要使用基本控件样式。
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyListBoxItem), new FrameworkPropertyMetadata(typeof(ListBoxItem)));
我想,从静态构造函数中删除该行会更好。
关于c# - 样式 : BasedOn and DefaultStyleKeyProperty. OverrideMetadata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19568199/
构建一个具有自定义“高对比度”主题的应用程序,供户外使用,可以在运行时打开和关闭。通过合并和取消合并包含如下样式的资源字典,这可以正常工作... 当 menuitem
有没有办法在 XAML 中组合多种样式来创建具有所有所需设置的新样式? 例如(伪代码); ... ... ... other properties. 我知道样式有一个 Bas
这些简单的样式突然失效了。直到今天他们都工作得很好。 这两个都显示 BasedOn 属性上的错误。 The resource "{x:Type TextBlock}" co
...setters... 除了要删除的 DataTrigger 之外,我喜欢样式中的所有内容。怎么改?
我目前正在为我们的应用程序制作“基本样式”。我首先为我们的按钮制作了一个“基本样式”,这将是一个很好的双渐变(我创建了一个包含 2 行的模板,并且两行都有一个双点渐变)。 所以,基本按钮工作正常,现在
当我使用下面的代码时,它起作用了,因为我使用的是 ListBox 但是当我将以下代码用于 ListView 时,我收到警告/异常
我正在处理的应用程序有 2 个 ResourceDictionary、DefaultStyles.xaml 和 CustomStyles.xaml。 CustomStyles 字典中的样式是否可能使用
当我在 Visual Studio 中创建自定义控件时,会自动添加一个静态构造函数: static MyListBoxItem() { DefaultStyleKeyProperty.Ov
我无法将 MouseOver 样式应用于 ContentPresenter 内的路径。 我有一个包含 ContentPresenter 的 Button 样式:
我想知道是否有一种方法可以将 wpf 样式的 basedOn 属性与动态资源一起使用。例如 这例如抛出一个错误,表明动态资源与 BaseOn 样式结合使用是不可能的。 我想知道怎么会有人这
我有许多 PathGeometry 实例,它们为不同的按钮绘制各种图形。因此,我创建了一个用于显示 Path 的按钮类型,然后根据按钮状态更新 Path.Stroke。因此,禁用时显示为灰色,鼠标悬停
我看到这样的 XAML 标记: 而且我想知道为什么有必要将 BasedOn 属性设置为 null。在文档中,Style.BasedOn 的默认值为 null。我在这里遗漏了什么吗? 最佳答案 也许他
目前,我有两个非常大的 DataTemplate 对象来显示两个列表框中的两组项目。在两个 ListBox 的 ItemContainerStyle 属性中设置的两个 Styles 的 Content
我的要求是在具有以下情况的文本框上应用多种样式: 我在另一个文件中有一种样式(例如 MyTextStyle)说“Generic.xaml” 我的文本框在 ABC.xaml 我想对这个文本框应用一些触发
我正在创建我的第一个 WPF Metro 应用程序。我正在尝试扩展作为 Metro 应用程序一部分的样式(在 Common/StandardStyles.xaml 文件中) 我没有修改那个文件。 相反
我正在尝试扩展 TextBlock 的基本样式。在 WPF 世界中的简单思考,在 Silverlight 中应该是相同的。但是我在 x:Type 上遇到错误。 如何在 Silverlight 中翻译
我是一名优秀的程序员,十分优秀!