我正在与MahApps合作并尝试将其强调色自动应用于OxyPlot图表。我正在使用Caliburn并在我的viewmodel中以编程方式设置我的LineSeries为:
_bubbleSeries = new LineSeries
{
StrokeThickness = 2,
Color = {Binding AccentColorBrush} // <-- This line here would be nice
CanTrackerInterpolatePoints = false,
Title = "Bubbles",
Smooth = true,
};
在XAML中绑定到AccentColorBrush很容易,但是OxyPlot不允许我在XAML中设置LineSeries,因此任何关于如何在我的ViewModel中以编程方式执行此操作的建议都将非常感激。
答案 0 :(得分:2)
您只需设置AccentColor
后面的代码
_bubbleSeries.SetResourceReference(ColorProperty, "AccentColor");
好的是,这是DynamicResource
,所以如果你改变重音或主题,它就会改变。
修改强>
在我得知LineSeries
不是FrameworkElement
后,我可以提供另一种可能的解决方案。
ThemeManager
有一个事件可以对主题变化做出反应。
ThemeManager.IsThemeChanged += ThemeManager_IsThemeChanged;
void ThemeManager_IsThemeChanged(object sender, OnThemeChangedEventArgs e)
{
// handle theme change
}
使用这些事件参数。
public static event EventHandler<OnThemeChangedEventArgs> IsThemeChanged;
public class OnThemeChangedEventArgs : EventArgs
{
public AppTheme AppTheme { get; set; }
public Accent Accent { get; set; }
}
所以你可以像这样设置颜色
// this = maybe your window
var accentColor = ThemeManager.GetResourceFromAppStyle(this, "AccentColor")
// or
var accentColor = ThemeManager.GetResourceFromAppStyle(Application.Current.MainWindow, "AccentColor")
// initial
_bubbleSeries = new LineSeries
{
StrokeThickness = 2,
Color = accentColor,
CanTrackerInterpolatePoints = false,
Title = "Bubbles",
Smooth = true,
};
现在主题改变后
void ThemeManager_IsThemeChanged(object sender, OnThemeChangedEventArgs e)
{
// handle theme change
_bubbleSeries.Color = e.Accent.Resources["AccentColor"];
}
希望现在有所帮助!
答案 1 :(得分:0)
假设您在App.xaml
中有一个MahApps主题,例如Cobalt Theme
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Cobalt.xaml" />
您可以使用ThemeManager
类
var color = MahApps.Metro.ThemeManager.GetAccent("Cobalt").Resources["AccentColor"];