如何在WPF中创建探查器GUI?

时间:2010-05-12 17:02:42

标签: c# wpf

我希望在WPF中创建一个任务分析器,其UI类似于incredibuild。

例如,定时任务在各自的行上显示为条带。看看:

http://baoz.net/wp-content/2009/06/ib1.png

看看我的意思。我不确定解决这个问题的最佳方法是什么?我是否应该覆盖为您创建自定义布局面板的Panel类,或者是否有适合我需要的现有控件/库。到目前为止,我已经看过各种图表控件,但我不确定是否可以通过调整来实现这种行为。我真的希望有人一直使用WPF来帮助我缩小搜索范围。要知道google的内容并不容易:)

1 个答案:

答案 0 :(得分:1)

在WPF中,这种图表绝对是微不足道的。不需要特殊的图表包:

在您的资源中,定义一个DataTemplate,用于显示宽度绑定到事件长度的事件:

  <DataTemplate TargetType="{x:Type local:Event}">
    <Border Width="{Binding EventLength}">  <!-- This sets the width -->
      <Border Margin="1" Padding="1" StrokeThickness="1" Stroke="Black"
              Background="{Binding EventColor}"> <!-- Actual border -->
        <TextBlock Text="{Binding EventDescription}" />
      </Border>
    </Border>
  </DataTemplate>

还定义水平项面板模板:

  <ItemsPanelTemplate x:Key="HorizontalPanel"><DockPanel/></ItemsPanelTemplate>

现在你的实际图表很容易构建:

<ItemsControl ItemsSource="{Binding CPUs}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <DockPanel>
        <TextBlock Width="100" Text="{Binding Name}" /> <!-- CPU name -->
        <Rectangle Width="1" Fill="Black" />            <!-- Vertical divider -->
        <ItemsControl ItemsSource="{Binding Events}"    <!-- Events -->
                      ItemsPanel="{StaticResource HorizontalPanel}" />
      </DockPanel>
    </DataTemplate>
  </ItemsControl.Template>
</ItemsControl>

如果事件之间存在间隙,只需在“事件”集合中添加“Gap”对象即可表示它们,然后为间隙添加DataTemplate:

<DataTemplate TargetType="{x:Type local:Gap}">
  <UIElement Width="{Binding GapWidth}" />
</DataTemplate>