2010-09-15 3 views
1

Любые идеи относительно того, почему код WPAM XAML, который у меня есть, не работает. Я пытаюсь переопределить отображение диаграмм WPFToolkit и взял свой XAML по умолчанию и включен в раздел Grid.Resources в качестве средства переопределения. В частности, я хотел, чтобы удалить маркеры графа, но этот конкретный вопрос относится к разъяснению моего понимания XAML, спрашивая, почему эти конкретные подходы не работают:wpf - почему этот шаблон замены XAML не работает

а) - Я попытался положить видимость = "Hidden в элементе Grid, но это, похоже, не работает? Почему это должно быть?

b) попытался вынуть все строки в теге, однако это не сработает. но я не уверен, что все мои шаблоны переопределения действительно работают вообще для LineDataPoint? (Я замечаю, что переопределение LineSeries, которое у меня есть в приведенном ниже коде, однако, работает)

XAML является:

 <!-- charting:LineSeries --> 
     <Style TargetType="chartingToolkit:LineSeries"> 
      <Setter Property="IsTabStop" Value="False" /> 
      <Setter Property="PolylineStyle"> 
       <Setter.Value> 
        <Style TargetType="Polyline"> 
         <Setter Property="StrokeThickness" Value="1" /> 
        </Style> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <!-- charting:LineDataPoint --> 
     <Style TargetType="chartingToolkit:LineDataPoint"> 
      <Setter Property="Background" Value="Orange" /> 
      <Setter Property="BorderBrush" Value="Red" /> 
      <Setter Property="BorderThickness" Value="1" /> 
      <Setter Property="IsTabStop" Value="False" /> 
      <Setter Property="Width" Value="2" /> 
      <Setter Property="Height" Value="2" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="chartingToolkit:LineDataPoint"> 
         <Grid x:Name="Root" Opacity="0" Visibility="Hidden"> 
          <Ellipse Stroke="{TemplateBinding BorderBrush}" Fill="{TemplateBinding Background}" Height="30"/> 
          <Ellipse RenderTransformOrigin="0.661,0.321"> 
           <Ellipse.Fill> 
            <RadialGradientBrush GradientOrigin="0.681,0.308"> 
             <GradientStop Color="Green" /> 
             <GradientStop Color="#FFFFFFFF" Offset="1" /> 
            </RadialGradientBrush> 
           </Ellipse.Fill> 
          </Ellipse> 
          <Ellipse x:Name="SelectionHighlight" Opacity="0" Fill="Red" /> 
          <Ellipse x:Name="MouseOverHighlight" Opacity="0" Fill="White" /> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

    </Grid.Resources> 

    <chartingToolkit:Chart Title="Engine Performance"> 
     <!-- Power curve --> 
     <chartingToolkit:LineSeries 
         Title="Power" 
         ItemsSource="{StaticResource EngineMeasurementCollection}" 
         IndependentValueBinding="{Binding Speed}" 
         DependentValueBinding="{Binding Power}"> 
      <!-- Vertical axis for power curve --> 
      <chartingToolkit:LineSeries.DependentRangeAxis> 
       <chartingToolkit:LinearAxis 
           Orientation="Y" 
           Title="Power (hp)" 
           Minimum="0" 
           Maximum="250" 
           Interval="50" 
           ShowGridLines="True"/> 
      </chartingToolkit:LineSeries.DependentRangeAxis> 
     </chartingToolkit:LineSeries> 
     <!-- Torque curve --> 
     <chartingToolkit:LineSeries 
         Title="Torque" 
         ItemsSource="{StaticResource EngineMeasurementCollection}" 
         IndependentValueBinding="{Binding Speed}" 
         DependentValueBinding="{Binding Torque}"> 
      <!-- Vertical axis for torque curve --> 
      <chartingToolkit:LineSeries.DependentRangeAxis> 
       <chartingToolkit:LinearAxis 
           Orientation="Y" 
           Title="Torque (lb-ft)" 
           Minimum="50" 
           Maximum="300" 
           Interval="50"/> 
      </chartingToolkit:LineSeries.DependentRangeAxis> 
     </chartingToolkit:LineSeries> 
     <chartingToolkit:Chart.Axes> 
      <!-- Shared horizontal axis --> 
      <chartingToolkit:LinearAxis 
          Orientation="X" 
          Title="Speed (rpm)" 
          Interval="1000" 
          ShowGridLines="True"/> 
     </chartingToolkit:Chart.Axes> 
    </chartingToolkit:Chart> 
</Grid> 

РЕДАКТИРОВАТЬ:

PS. Я сварил это до того, что шаблон не подобрался, как показано в коде ниже - но его нужно поднять? то есть я НЕ установить х: ключ от

<Window x:Class="MyInternetUsage.EnginePerformance" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:local="clr-namespace:DataVisualizationDemos" xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" Title="EnginePerformance" Height="277" Width="371"> 
    <Grid> 
     <Grid.Resources> 
      <local:EngineMeasurementCollection x:Key="EngineMeasurementCollection"/> 

      <!-- charting:LineDataPoint --> 
      <Style TargetType="chartingToolkit:LineDataPoint"> 
       <Setter Property="Background" Value="Orange" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="chartingToolkit:LineDataPoint"> 

          <Grid 
           Width="30" 
           Height="30" 
           Background="{TemplateBinding Background}"/> 

         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Grid.Resources> 

     <chartingToolkit:Chart Title="Engine Performance"> 
      <!-- Power curve --> 
      <chartingToolkit:LineSeries 
          Title="Power" 
          ItemsSource="{StaticResource EngineMeasurementCollection}" 
          IndependentValueBinding="{Binding Speed}" 
          DependentValueBinding="{Binding Power}"> 

      </chartingToolkit:LineSeries> 

     </chartingToolkit:Chart> 
    </Grid> 
</Window> 

благодаря

ответ

2

Вполне возможно, что LineDataPoint не templatable или, по крайней мере, не в полной мере, в силу того, многие из его свойств стиля, определенных внутри.

Вы можете установить стиль по умолчанию, как вы это сделали, и это очень хорошо работает для «беззаботных» элементов управления, которые являются частью фреймворка, поскольку они разработаны с учетом шаблонов (и поэтому используют TemplateBinding s), но если элемент управления, например, объявляет внутренне, что его фон фиолетовый, вы не можете переопределить его со стилем.

Также возможно, что то, что вы видите, на самом деле не является фоном самого элемента управления, а скорее фоном составного элемента управления внутри. Если сконструированный компонент не «пропускает» свойство, значения параметров самого элемента управления не будут влиять на внутренние части, которые вы видите.

Наконец, возможно, что Chart определяет стиль по умолчанию для LineDataPoint. Будучи в более узком объеме, чем ваш ресурс сетки, это имеет приоритет.

Если у вас есть доступ к источнику, вы можете решить это; без источника или хорошей документации по компоненту, это просто разочаровывающая игра с предсказанием и ошибкой относительно того, что происходит.

+0

спасибо - мне понравилось ваше последнее предложение - заставляет меня чувствовать себя немного лучше о том, что я не могу догадаться до сих пор :) Я получил совет советников, говорящий, чтобы попытаться сделать следующее, поэтому я принимаю этот совет будет основываться на знании того, как был создан контроль?Advice = Вы можете использовать свойство Binding on Visibility корневого изображения (для LineDataPoint): Greg

+0

@Greg Есть ли что-нибудь в окне вывода? Ошибки привязки или данных? – Jay

+0

Не вижу и не связывает ошибку. Посмотрите на некоторые позиции «Загруженные» и 4 «Исключения с первым шансом», это были следующие: исключение первого исключения типа «System.NotSupportedException» произошло в PresentationFramework.dll Первое исключение случайного типа «System.Xaml. XamlObjectWriterException 'произошел в System.Xaml.dll Первое исключение исключения типа «System.NotSupportedException» произошло в PresentationFramework.dll Первое исключение исключения типа «System.Xaml.XamlObjectWriterException» произошло в System.Xaml.dll – Greg

Смежные вопросы