wpf - почему этот шаблон переопределения XAML не работает - PullRequest
1 голос
/ 16 сентября 2010

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

a) - Я пытался поместить Visibility = "Скрытый в элемент 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. Я свел его к тому факту, что шаблон не подобрался, как показано в приведенном ниже коде - но его нужно поднять, нет? то есть я НЕ установил ключ 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>

спасибо

1 Ответ

2 голосов
/ 16 сентября 2010

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

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

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

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

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

...