wpf — почему этот шаблон переопределения XAML не работает

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

a). Я пытался поместить Visibility="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>

EDIT:

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

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

Благодарность


person Greg    schedule 15.09.2010    source источник


Ответы (1)


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

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

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

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

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

person Jay    schedule 16.09.2010
comment
спасибо - мне понравилось ваше последнее предложение - заставляет меня чувствовать себя немного лучше из-за того, что я не могу пока высказаться :) Я получил несколько советов от доски обсуждений, в которых говорилось, что нужно попытаться сделать следующее, поэтому я предполагаю, что этот совет будет основан на знание того, как был построен контроль? Совет = Вы можете использовать свойство Binding on Visibility корневого визуального элемента (для LineDataPoint): ‹Grid x:Name=Root Visibility={Binding Visible, Converter={StaticResource booleanToVisibilityConverter}}› - person Greg; 16.09.2010
comment
@Greg Есть что-нибудь в окне вывода? Привязка или ошибки данных? - person Jay; 16.09.2010
comment
Не вижу и привязки ошибки. Видите некоторые загруженные позиции и 4 ошибки исключения первого шанса, а именно: Исключение первого шанса типа «System.NotSupportedException» произошло в PresentationFramework.dll Исключение первого шанса типа «System.Xaml.XamlObjectWriterException» произошло в системе .Xaml.dll Исключение первого шанса типа «System.NotSupportedException» возникло в PresentationFramework.dll Исключение первого шанса типа «System.Xaml.XamlObjectWriterException» произошло в System.Xaml.dll - person Greg; 16.09.2010
comment
@Greg Какая ссылка на обсуждение, которое вы упомянули? - person Jay; 16.09.2010