2011-07-26 4 views
1

PieDataPoint 팔레트가 더 이상 작동하지 않습니다. 내 툴팁을 사용자 정의하려고합니다. 내가 빠뜨린 것이 있습니까?Silverlight 4.0 : 차트 툴킷 - 팔레트가 작동하지 않습니다.

PieDataPoint에 아래를 추가하면 차트가 빨간색으로 변하는 것으로 보입니다.

<Setter Property="Background" Value="Red"/> 

고마워요!

<charting:PieSeries 
     ItemsSource="{Binding}" 
     DependentValueBinding="{Binding Length}" 
     IndependentValueBinding="{Binding}"> 
      <charting:PieSeries.DataPointStyle> 
       <Style TargetType="charting:PieDataPoint"> 
        <Setter Property="BorderThickness" Value="1"/> 
        <Setter Property="IsTabStop" Value="False"/> 
        <Setter Property="RatioStringFormat" Value="{}{0:p2}"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="charting:PieDataPoint"> 
           <Grid 
        x:Name="Root" 
        Opacity="0"> 
            <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> 
                <DoubleAnimation 
             Storyboard.TargetName="MouseOverHighlight" 
             Storyboard.TargetProperty="Opacity" 
             To="0.6" 
             Duration="0"/> 
               </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> 
                <DoubleAnimation 
             Storyboard.TargetName="SelectionHighlight" 
             Storyboard.TargetProperty="Opacity" 
             To="0.6" 
             Duration="0"/> 
               </Storyboard> 
              </VisualState> 
             </VisualStateGroup> 
             <VisualStateGroup x:Name="RevealStates"> 
              <VisualStateGroup.Transitions> 
               <VisualTransition GeneratedDuration="0:0:0.5"/> 
              </VisualStateGroup.Transitions> 
              <VisualState x:Name="Shown"> 
               <Storyboard> 
                <DoubleAnimation 
             Storyboard.TargetName="Root" 
             Storyboard.TargetProperty="Opacity" 
             To="1" 
             Duration="0"/> 
               </Storyboard> 
              </VisualState> 
              <VisualState x:Name="Hidden"> 
               <Storyboard> 
                <DoubleAnimation 
             Storyboard.TargetName="Root" 
             Storyboard.TargetProperty="Opacity" 
             To="0" 
             Duration="0"/> 
               </Storyboard> 
              </VisualState> 
             </VisualStateGroup> 
            </VisualStateManager.VisualStateGroups> 
            <Path 
         x:Name="Slice" 
         Data="{TemplateBinding Geometry}" 
         Fill="{TemplateBinding Background}" 
         Stroke="{TemplateBinding BorderBrush}" 
         StrokeMiterLimit="1"> 
             <ToolTipService.ToolTip> 
              <StackPanel> 
               <ContentControl Content="Test"/> 
               <ContentControl Content="{TemplateBinding FormattedDependentValue}"/> 
               <ContentControl Content="{TemplateBinding FormattedRatio}"/> 
              </StackPanel> 
             </ToolTipService.ToolTip> 
            </Path> 
            <Path 
         x:Name="SelectionHighlight" 
         Data="{TemplateBinding GeometrySelection}" 
         Fill="Red" 
         StrokeMiterLimit="1" 
         IsHitTestVisible="False" 
         Opacity="0"/> 
            <Path 
         x:Name="MouseOverHighlight" 
         Data="{TemplateBinding GeometryHighlight}" 
         Fill="White" 
         StrokeMiterLimit="1" 
         IsHitTestVisible="False" 
         Opacity="0"/> 
           </Grid> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </charting:PieSeries.DataPointStyle> 
      <charting:PieSeries.Palette> 
       <datavis:ResourceDictionaryCollection> 

        <ResourceDictionary> 
         <RadialGradientBrush x:Key="Background" GradientOrigin="-0.1,-0.1" Center="0.075,0.015" RadiusX="1.05" RadiusY="0.9"> 
          <GradientStop Color="#FFB8C0AC"/> 
          <GradientStop Color="#FF5F7143" Offset="1"/> 
         </RadialGradientBrush> 
         <Style x:Key="DataPointStyle" TargetType="Control"> 
          <Setter Property="Background" Value="{StaticResource Background}"/> 
         </Style> 
         <Style x:Key="DataShapeStyle" TargetType="Shape"> 
          <Setter Property="Stroke" Value="{StaticResource Background}" /> 
          <Setter Property="StrokeThickness" Value="2" /> 
          <Setter Property="StrokeMiterLimit" Value="1" /> 
          <Setter Property="Fill" Value="{StaticResource Background}" /> 
         </Style> 
        </ResourceDictionary> 

        <ResourceDictionary> 
         <RadialGradientBrush x:Key="Background" GradientOrigin="-0.1,-0.1" Center="0.075,0.015" RadiusX="1.05" RadiusY="0.9"> 
          <GradientStop Color="#FFFDE79C"/> 
          <GradientStop Color="#FFF6BC0C" Offset="1"/> 
         </RadialGradientBrush> 
         <Style x:Key="DataPointStyle" TargetType="Control"> 
          <Setter Property="Background" Value="{StaticResource Background}"/> 
         </Style> 
         <Style x:Key="DataShapeStyle" TargetType="Shape"> 
          <Setter Property="Stroke" Value="{StaticResource Background}" /> 
          <Setter Property="StrokeThickness" Value="2" /> 
          <Setter Property="StrokeMiterLimit" Value="1" /> 
          <Setter Property="Fill" Value="{StaticResource Background}" /> 
         </Style> 
        </ResourceDictionary> 
       </datavis:ResourceDictionaryCollection> 
      </charting:PieSeries.Palette> 
     </charting:PieSeries> 

답변

0

다행히도 코드 비헤이비어에 일부 코드를 넣어서 해결했습니다. 그러나 이제는 MVVM에서 어떻게 적용할까요? 여기

ResourceDictionaryCollection palette = new ResourceDictionaryCollection(); Random rom = new Random(); for (int i = 0; i < 256; i++) { byte r = Convert.ToByte(rom.Next(256)); byte g = Convert.ToByte(rom.Next(256)); byte b = Convert.ToByte(rom.Next(256)); Style style = new Style(typeof(Control)); style.Setters.Add(new Setter(BackgroundProperty, new SolidColorBrush(Color.FromArgb(255, r, g, b)))); style.Setters.Add(new Setter(TemplateProperty, this.Resources["pi"])); ResourceDictionary dictionary = new ResourceDictionary(); dictionary.Add("DataPointStyle", style); palette.Add(dictionary); } tempChart.Palette = palette; 

출력입니다 : 뒤에 내 코드에서

<ControlTemplate x:Key="pi" TargetType="charting:PieDataPoint"> 
     <Grid x:Name="Root" Opacity="0"> 
      <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> 
          <DoubleAnimation 
             Storyboard.TargetName="MouseOverHighlight" 
             Storyboard.TargetProperty="Opacity" 
             To="0.6" 
             Duration="0"/> 
         </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> 
          <DoubleAnimation 
             Storyboard.TargetName="SelectionHighlight" 
             Storyboard.TargetProperty="Opacity" 
             To="0.6" 
             Duration="0"/> 
         </Storyboard> 
        </VisualState> 
       </VisualStateGroup> 
       <VisualStateGroup x:Name="RevealStates"> 
        <VisualStateGroup.Transitions> 
         <VisualTransition GeneratedDuration="0:0:0.5"/> 
        </VisualStateGroup.Transitions> 
        <VisualState x:Name="Shown"> 
         <Storyboard> 
          <DoubleAnimation 
             Storyboard.TargetName="Root" 
             Storyboard.TargetProperty="Opacity" 
             To="1" 
             Duration="0"/> 
         </Storyboard> 
        </VisualState> 
        <VisualState x:Name="Hidden"> 
         <Storyboard> 
          <DoubleAnimation 
             Storyboard.TargetName="Root" 
             Storyboard.TargetProperty="Opacity" 
             To="0" 
             Duration="0"/> 
         </Storyboard> 
        </VisualState> 
       </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
      <Path x:Name="Slice" 
       Data="{TemplateBinding Geometry}" 
       Fill="{TemplateBinding Background}" 
       Stroke="{TemplateBinding BorderBrush}" 
       StrokeMiterLimit="1"> 
       <ToolTipService.ToolTip> 
        <StackPanel> 
         <ContentControl> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{TemplateBinding IndependentValue}" /> 
           <TextBlock Text=" - "/> 
           <TextBlock Text="{TemplateBinding FormattedDependentValue}"/> 
          </StackPanel> 
         </ContentControl> 
         <ContentControl Content="{TemplateBinding FormattedRatio}"/> 
        </StackPanel> 
       </ToolTipService.ToolTip> 
      </Path> 
      <Path x:Name="SelectionHighlight" 
       Data="{TemplateBinding GeometrySelection}" 
       Fill="Red" 
       StrokeMiterLimit="1" 
       IsHitTestVisible="False" 
       Opacity="0"/> 
      <Path x:Name="MouseOverHighlight" 
       Data="{TemplateBinding GeometryHighlight}" 
       Fill="White" 
       StrokeMiterLimit="1" 
       IsHitTestVisible="False" 
       Opacity="0"/> 
     </Grid> 
    </ControlTemplate> 

: 내 XAML 자원에서

<charting:Chart x:Name="tempChart" 
     Title="Simple Palette Change" 
     Grid.Column="0" 
     Grid.Row="1"> 
     <charting:PieSeries 
      ItemsSource="{Binding}" 
      DependentValueBinding="{Binding Length}" 
      IndependentValueBinding="{Binding}"> 
     </charting:PieSeries> 
    </charting:Chart> 

여기 내 데이터 포인트 템플릿입니다 : 내 XAML에서

여기 내 차트입니다 팔레트가있는 내 사용자 정의 PieDataPoint :