以编程方式将Oxyplot绑定到MahApps AccentColorBrush

时间:2015-10-30 03:12:17

标签: c# xaml mahapps.metro oxyplot caliburn

我正在与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中以编程方式执行此操作的建议都将非常感激。

2 个答案:

答案 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"];