2012-04-02 12 views
1

Ich habe ein WPF-Diagramm, das ich eine BarSeries dynamisch bin. Ich möchte aber, dass die BarSeries 3 Informationen anzeigt. Die dritte Information, die ich gerne im Tooltip eines bestimmten Datenpunktes sehen möchte.WPF-Diagramm Benutzerdefinierte QuickInfo-Bindung

Gibt es eine Möglichkeit, den Wert/Inhalt des Tooltips für einen bestimmten Datenpunkt in meinen barseries dynamisch zu binden ??

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> 

-Code-Behind

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; 

Wie kann ich die Bindung für den Tooltip im Code angeben?

Vielen Dank im Voraus ...

Antwort

1

Ich löste tatsächlich mein eigenes Problem letzte Nacht, indem ich die Vorlage für BarDataPoint völlig neu definiere.

Stil 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> 

Diagramm 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> 

-Code-Behind:

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

Da ich die DataSeries.ItemsSource in der Code- definieren dahinter, das Too lTip-Bindung weiß, wo Sie suchen müssen. Ich hoffe, dass jemand anderes davon profitieren kann, da ich einen ganzen Tag damit verbracht habe, dies herauszufinden: D

0

In Code hinter dir nicht einen Stil im Fluge Ursache Stil versiegelt bekommen bearbeiten kann, wenn es geladen wird. Sie können also einen neuen Stil erstellen, den Sie in der XAML erstellen, und Ihre Tooltip-Bindung hinzufügen. So etwas wie

+0

Ich habe versucht, dies zu tun, aber es würde nicht funktionieren. Das erste Argument für den Setter-Konstruktor ist vom Typ DependencyProperty und hat die Zeichenfolge nicht gemocht. Ich habe auch versucht, die "Property = 'ToolTip" auf "Property = DependencyProperty.Register (' ToolTip ', typeof (ToolTip), typeof (BarDataPoint))" neu zu definieren und erhielt eine InvalidOperationException zur Laufzeit. Trotzdem danke. –

Verwandte Themen