You could nest your chart in a Popup rather than in a Window and then launch it like this
<Button x:Name="button" Click="button_Click"/>
<Popup x:Name="popup" StaysOpen="true">
<TextBlock Text="Clicked"/>
</Popup>
private void button_Click(object sender, RoutedEventArgs e)
{
if (!popup.IsOpen) popup.IsOpen = true; // Open it if it's not open
else popup.IsOpen = false; // Close it if it's open
}
This article describes more of your options.
Alternatively, you could try starting your Windows in separate UI threads like this article suggests. Something like this
<Button x:Name="button" Click="button_Click"/>
private void button_click(object sender, RoutedEventArgs e)
{
Thread thread = new Thread(() =>
{
MyWindow w = new MyWindow();
w.Show();
w.Closed += (sender2, e2) =>
w.Dispatcher.InvokeShutdown();
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
The advantage of the popup approach is it's much simpler. One advantage of the multiple UI thread approach is that you could have a second, fully functioning, window not a popup.
An issue with both approaches is that when you move your main window your second window won't move with it. This being said, at least with the second window approach it's clearer that your second window is independent of your first than it is with the popup approach. Solutions to this problem include using an adorner as suggested in this question or setting aside a portion of your main window for "additional information" and then you could show/hide things like your chart by changing the visibility.