2017-03-15 60 views
1

enter image description here我想設置我自己的標籤文本放置在IntervalBarSeries,但它只顯示醜陋的DateTime.ToDouble() - 值。 Title = "anyText"不會影響任何內容。 任何想法?接下來的問題是,IntervalBarSeries沒有一個Style屬性...設置標籤的IntervalBarSeries(oxyplot)

MCVE:

XAML:

<Window x:Class="Label_Issue.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:Label_Issue" 
     xmlns:oxy="http://oxyplot.org/wpf" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <oxy:PlotView x:Name="barChartModel"/> 
    </Grid> 
</Window> 

的.cs:

using OxyPlot; 
using OxyPlot.Axes; 
using OxyPlot.Series; 
using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace Label_Issue 
{ 
    /// <summary> 
    /// Interaktionslogik für MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      SetUtilizationData(); 
     } 

     public PlotModel PlotModel { get; set; } 
     private void SetUtilizationData() 
     { 
      PlotModel = new PlotModel 
      { 
       LegendOrientation = LegendOrientation.Vertical, 
       LegendPlacement = LegendPlacement.Outside, 
       LegendPosition = LegendPosition.RightTop 
      }; 


      // define x-axis 
      OxyPlot.Axes.DateTimeAxis dateAxis = new OxyPlot.Axes.DateTimeAxis 
      { 
       Position = OxyPlot.Axes.AxisPosition.Bottom, 
       //StringFormat = "dd/MM/yy HH:mm"   // automatisch? 
      }; 

      // add to plotmodel.axes 
      PlotModel.Axes.Add(dateAxis); 


      // define y-axis 
      CategoryAxis categoryAxis = new CategoryAxis 
      { 
       Position = AxisPosition.Left, 
      }; 

      //add to plotmodel.axes 
      PlotModel.Axes.Add(categoryAxis); 

      IntervalBarSeries barSeries = new OxyPlot.Series.IntervalBarSeries 
      { 
       LabelMargin = 0, 
       LabelFormatString = "{0:.0}", 
      }; 

      TestData td = new TestData(); 
      foreach (TestDataItem data in td) 
      { 
       IntervalBarItem item = new IntervalBarItem 
       { 
        Start = OxyPlot.Axes.DateTimeAxis.ToDouble(data.start), 
        End = OxyPlot.Axes.DateTimeAxis.ToDouble(data.end), 
        CategoryIndex = 0, 
        Title = "test" 
       }; 
       barSeries.Items.Add(item); 
      } 

      PlotModel.Series.Add(barSeries); 
      barChartModel.Model = PlotModel; 
     } 
    } 
    public class TestData : ObservableCollection<TestDataItem> 
    { 
     public TestData() 
     { 
      Add(new TestDataItem() 
      { 
       start = new DateTime(2017, 04, 01, 06, 00, 00), 
       end = new DateTime(2017, 04, 01, 06, 30, 00), 
      }); 
     } 
    } 
    public class TestDataItem 
    { 

     public DateTime start { get; set; } 
     public DateTime end { get; set; } 
    } 
} 
+0

你能提供'MCVE'嗎? –

+0

我用一個barItem添加了一個MCVE –

+0

我寫了一個答案,如果您有任何問題,只需在[WPF聊天](http://chat.stackoverflow.com/rooms/18165/wpf)中ping我 –

回答

1

你得到這樣的結果,因爲你改變了格式爲LabelFormatString

IntervalBarSeries barSeries = new OxyPlot.Series.IntervalBarSeries 
{ 
    LabelMargin = 0, 
    LabelFormatString = "{0:.0}", 
}; 

默認情況下LabelFormatString有值:{2}Title

所以,只是刪除它,然後你就能夠得到正確的結果。

IntervalBarSeries barSeries = new OxyPlot.Series.IntervalBarSeries 
{ 
    LabelMargin = 0 
}; 
+0

謝謝非常 ! –