2012-04-02 62 views
1

我有一個WPF圖表,我動態綁定一個BarSeries。不過,我想讓BarSeries顯示3條信息。我希望在任何給定數據點的工具提示中顯示第三條信息。WPF圖表自定義工具提示綁定

是否有任何方法來動態綁定工具提示的值/內容給我的酒吧給定的數據點?

XAML:

<UserControl.Resources> 
    <Style 
     x:Key="SimpleDataPointStyle" 
     BasedOn="{StaticResource {x:Type chartingToolkit:BarDataPoint}}" 
     TargetType="{x:Type chartingToolkit:BarDataPoint}"> 
     <Setter Property="Width" Value="20"/> 
     <Setter Property="Height" Value="20"/> 
     <Setter x:Name="DataPointToolTip" Property="ToolTip" Value="{Binding Path=Event_Description}"/> 
    </Style> 
</UserControl.Resources> 
<Grid x:Name="MetricsPanel" Width="904" Height="376" HorizontalAlignment="Left" VerticalAlignment="Top"> 
    <chartingToolkit:Chart x:Name="MetricChart" HorizontalAlignment="Left" Width="464" Height="352" VerticalAlignment="Top"> 
     <chartingToolkit:Chart.Series> 
      <chartingToolkit:BarSeries x:Name="MainSeries" 
             Title="Contribution to Risk and Errors (%)" 
             IndependentValueBinding="{Binding}" 
             DependentValueBinding="{Binding}"> 
       <chartingToolkit:BarSeries.DataPointStyle> 
        <Style 
         BasedOn="{StaticResource SimpleDataPointStyle}" 
         TargetType="{x:Type chartingToolkit:BarDataPoint}"> 
        </Style> 
       </chartingToolkit:BarSeries.DataPointStyle> 

      </chartingToolkit:BarSeries> 
     </chartingToolkit:Chart.Series> 
    </chartingToolkit:Chart> 

代碼隱藏

highestWeightedEvents = BuildHighestWeightedEventsTable();

 MainSeries.DependentValueBinding = new Binding("Cutset_Frequency"); 
     MainSeries.IndependentValueBinding = new Binding("Event_Number"); 
     MainSeries.ItemsSource = highestWeightedEvents.DefaultView; 
     Style dataPointStyle = (Style)Resources["SimpleDataPointStyle"]; 
     MainSeries.DataPointStyle = dataPointStyle; 

如何在後面的代碼中指定工具提示的綁定?

預先感謝...

回答

1

我實際上是通過徹底重新定義BarDataPoint的模板解決了我自己的問題。

風格XAML:

<Style x:Key="NewDataPointStyle" TargetType="chartingToolkit:BarDataPoint"> 
<Setter Property="Background" Value="SteelBlue" /> 
<Setter Property="IsTabStop" Value="False" /> 
<Setter Property="BorderBrush" Value="#FF686868" /> 
<Setter Property="Width" Value="20" /> 
<Setter Property="Height" Value="20" /> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="chartingToolkit:BarDataPoint"> 
      <Grid x:Name="Root" Opacity="1"> 
       <VisualStateManager.VisualStateGroups> 
        <VisualStateGroup x:Name="CommonStates"> 
         <VisualStateGroup.Transitions> 
          <VisualTransition GeneratedDuration="0:0:0.1" /> 
         </VisualStateGroup.Transitions> 
         <VisualState x:Name="Normal" /> 
         <VisualState x:Name="MouseOver"> 
          <Storyboard> 
           <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="MouseOverHighlight" Storyboard.TargetProperty="(UIElement.Opacity)"> 
            <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0.3" /> 
           </DoubleAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
        </VisualStateGroup> 
        <VisualStateGroup x:Name="SelectionStates"> 
         <VisualStateGroup.Transitions> 
          <VisualTransition GeneratedDuration="0:0:0.1" /> 
         </VisualStateGroup.Transitions> 
         <VisualState x:Name="Unselected" /> 
         <VisualState x:Name="Selected"> 
          <Storyboard> 
           <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="SelectionHighlight" Storyboard.TargetProperty="(UIElement.Opacity)"> 
            <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0.185" /> 
           </DoubleAnimationUsingKeyFrames> 
           <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="SelectionHighlight" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> 
            <SplineColorKeyFrame KeyTime="00:00:00" Value="#FF8A8A8A" /> 
           </ColorAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
        </VisualStateGroup> 
        <VisualStateGroup x:Name="RevealStates"> 
         <VisualStateGroup.Transitions> 
          <VisualTransition GeneratedDuration="0:0:0.5" /> 
         </VisualStateGroup.Transitions> 
         <VisualState x:Name="Shown"> 
          <Storyboard> 
           <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="Root" Storyboard.TargetProperty="(UIElement.Opacity)"> 
            <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1" /> 
           </DoubleAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
         <VisualState x:Name="Hidden"> 
          <Storyboard> 
           <DoubleAnimation Duration="0" Storyboard.TargetName="Root" Storyboard.TargetProperty="Opacity" To="0" /> 
          </Storyboard> 
         </VisualState> 
        </VisualStateGroup> 
       </VisualStateManager.VisualStateGroups> 
       <ToolTipService.ToolTip> 
        <ContentControl Content="{Binding Path=Event_Description}" /> 
       </ToolTipService.ToolTip> 
         <StackPanel Orientation="Horizontal" 
           Background="{TemplateBinding Background}"> 
         </StackPanel> 
       </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

圖XAML:

<chartingToolkit:Chart x:Name="MetricChart" HorizontalAlignment="Left" Width="464" Height="352" VerticalAlignment="Top"> 
     <chartingToolkit:Chart.Axes> 
      <chartingToolkit:LinearAxis Interval="10" Maximum="100" x:Name="XAxis" Orientation="X" Title="Percent Contribution (%)"/> 
      <chartingToolkit:CategoryAxis Title="Event Number" Orientation="Y"/> 
     </chartingToolkit:Chart.Axes> 
     <chartingToolkit:Chart.Series> 
      <chartingToolkit:BarSeries x:Name="MainSeries" 
             Title="Contribution to Risk and Errors (%)" 
             IndependentValueBinding="{Binding}" 
             DependentValueBinding="{Binding}" BorderThickness="0" BorderBrush="Black" Background="Black" OpacityMask="Black"> 
       <chartingToolkit:BarSeries.DataPointStyle> 
        <Style 
         BasedOn="{StaticResource NewDataPointStyle}" 
         TargetType="{x:Type chartingToolkit:BarDataPoint}"> 
        </Style> 
       </chartingToolkit:BarSeries.DataPointStyle> 
      </chartingToolkit:BarSeries> 
     </chartingToolkit:Chart.Series> 
     <chartingToolkit:Chart.LegendStyle> 
      <Style TargetType="Control"> 
       <Setter Property="Width" Value="0"/> 
       <Setter Property="Height" Value="0"/> 
      </Style> 
     </chartingToolkit:Chart.LegendStyle> 
    </chartingToolkit:Chart> 

代碼隱藏:

 //highestWeightedEvents is a DataTable 
     highestWeightedEvents = BuildHighestWeightedEventsTable(); 
     MainSeries.DependentValueBinding = new Binding("Cutset_Frequency"); 
     MainSeries.IndependentValueBinding = new Binding("Event_Number"); 
     MainSeries.ItemsSource = highestWeightedEvents.DefaultView; 

由於我的代碼 - 定義DataSeries.ItemsSource在後面,太提示綁定知道去哪裏看。我希望別人能夠從中受益,因爲我花了一整天的時間搞清楚這一點:D

0

在後面的代碼不能編輯在飛行事業的風格樣式得到,當它的加載密封。因此,您可以從您在xaml中創建的樣式創建新樣式並添加工具提示綁定。類似於

//your code behind 
     Style newDataPointStyle = (Style)Resources["SimpleDataPointStyle"]; 

     newDataPointStyle.Setters.Add(
      new Setter 
      { 
       Property = "ToolTip", 
       Value = new Binding("YourBinding") 
      }); 
     MainSeries.DataPointStyle = newDataPointStyle; 
+0

我試圖做到這一點,但它不會工作。 Setter構造函數的第一個參數是DependencyProperty類型,並且不喜歡字符串。我還嘗試將「Property ='ToolTip'」重新定義爲「Property = DependencyProperty.Register('ToolTip',typeof(ToolTip),typeof(BarDataPoint))」,並且在運行時獲取InvalidOperationException。不過謝謝。 – 2012-04-03 14:22:40