- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
构建一个具有自定义“高对比度”主题的应用程序,供户外使用,可以在运行时打开和关闭。通过合并和取消合并包含如下样式的资源字典,这可以正常工作...
<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template" Value="{StaticResource Theme_MenuItemTemplate}"/>
</Style>
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Path=Name}"/>
<Setter Property="IsCheckable" Value="True"/>
<Setter Property="IsChecked" Value="{Binding Path=Checked}"/>
<EventSetter Event="Checked" Handler="HistoryItem_Checked"/>
</Style>
</ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}">
<!-- Your overrides -->
</Style>
最佳答案
终于想出了一个解决方案DynamicResouce
对于 Style.BasedOn
使用 AttachedDependencyProperty
.
这是 ItemsControl.ItemContainerStyle
的修复程序(可以轻松修改更改 FrameworkElement.Style
)
public class DynamicContainerStyle
{
public static Style GetBaseStyle(DependencyObject obj)
{
return (Style)obj.GetValue(BaseStyleProperty);
}
public static void SetBaseStyle(DependencyObject obj, Style value)
{
obj.SetValue(BaseStyleProperty, value);
}
// Using a DependencyProperty as the backing store for BaseStyle. This enables animation, styling, binding, etc...
public static readonly DependencyProperty BaseStyleProperty =
DependencyProperty.RegisterAttached("BaseStyle", typeof(Style), typeof(DynamicContainerStyle), new UIPropertyMetadata(DynamicContainerStyle.StylesChanged));
public static Style GetDerivedStyle(DependencyObject obj)
{
return (Style)obj.GetValue(DerivedStyleProperty);
}
public static void SetDerivedStyle(DependencyObject obj, Style value)
{
obj.SetValue(DerivedStyleProperty, value);
}
// Using a DependencyProperty as the backing store for DerivedStyle. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DerivedStyleProperty =
DependencyProperty.RegisterAttached("DerivedStyle", typeof(Style), typeof(DynamicContainerStyle), new UIPropertyMetadata(DynamicContainerStyle.StylesChanged));
private static void StylesChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
if (!typeof(System.Windows.Controls.ItemsControl).IsAssignableFrom(target.GetType()))
throw new InvalidCastException("Target must be ItemsControl");
var Element = (System.Windows.Controls.ItemsControl)target;
var Styles = new List<Style>();
var BaseStyle = GetBaseStyle(target);
if (BaseStyle != null)
Styles.Add(BaseStyle);
var DerivedStyle = GetDerivedStyle(target);
if (DerivedStyle != null)
Styles.Add(DerivedStyle);
Element.ItemContainerStyle = MergeStyles(Styles);
}
private static Style MergeStyles(ICollection<Style> Styles)
{
var NewStyle = new Style();
foreach (var Style in Styles)
{
foreach (var Setter in Style.Setters)
NewStyle.Setters.Add(Setter);
foreach (var Trigger in Style.Triggers)
NewStyle.Triggers.Add(Trigger);
}
return NewStyle;
}
}
<!-- xmlns:ap points to the namespace where DynamicContainerStyle class lives -->
<MenuItem Header="Recent"
ItemsSource="{Binding Path=RecentFiles}"
IsEnabled="{Binding RelativeSource={RelativeSource Self}, Path=HasItems}"
ap:DynamicContainerStyle.BaseStyle="{DynamicResource {x:Type MenuItem}}">
<ap:DynamicContainerStyle.DerivedStyle>
<Style TargetType="MenuItem">
<EventSetter Event="Click" Handler="RecentFile_Clicked"/>
</Style>
</ap:DynamicContainerStyle.DerivedStyle>
<MenuItem.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
FrameworkElement.Style
的修改版本而是在我对另一篇文章的回答中:
关于wpf - Style BasedOn 的动态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9490264/
构建一个具有自定义“高对比度”主题的应用程序,供户外使用,可以在运行时打开和关闭。通过合并和取消合并包含如下样式的资源字典,这可以正常工作... 当 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 中翻译
我是一名优秀的程序员,十分优秀!