WPF - как определить, почему этот код в стиле XAML не работает? - PullRequest
0 голосов
/ 14 сентября 2010

Любой совет, как найти ошибку, чтобы понять, почему стили Grid.Resources в этом XAML не имеют никакого значения, как кажется, к конечному результату?

Примечание. Я использую Charting из WPFToolkit , поэтому, чтобы настроить внешний вид диаграммы, нужно применить области стилей (предложенные кем-то на форуме).

Итак, мой вопрос в общих чертах, отмечая, что я пытаюсь настроить внешний вид стороннего графика, как я могу отладить / найти ошибку, чтобы понять, что происходит не так? Есть ли уловка отладки? Например, когда я увеличил BorderThickness до 30, я не смог увидеть разницу. Что мне действительно нужно, так это эквивалент FireBug для HTML / CSS, который позволяет понять / посмотреть, какой CSS применяется к каким элементам.

РЕДАКТИРОВАТЬ: Таким образом, я действительно (я думаю) хочу иметь возможность пройтись по дереву объектов графика и вернуться к изменениям шаблона, внесенным в область Grid.Resources, посмотреть, почему они не произошли. *

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" mc:Ignorable="d" x:Name="Splash" x:Class="MyInternetUsage.SplashWindow"
        Title="SplashWindow" Height="421" Width="570">
    <DockPanel>
        <StackPanel VerticalAlignment="Top" DockPanel.Dock="Top" Orientation="Horizontal">
            <Button Content="Configure" HorizontalAlignment="Left" Margin="0" Width="78" VerticalAlignment="Center" Name="ConfigureButton" Click="ConfigureButton_Click" />
            <Button Content="Start" Name="StartButton" Width="78" Click="StartButton_Click" />
            <Button Content="Stop" Name="StopButton" Width="78" Click="StopButton_Click" />
        </StackPanel>

        <Grid>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="150"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <Label Content="Summary" Grid.Column="0"/>

            <GridSplitter HorizontalAlignment="Right" 
                VerticalAlignment="Stretch" Grid.Column="1" ResizeBehavior="PreviousAndNext"
                Width="5" Background="#FFBCBCBC"/>

                <Grid Grid.Column="2">
                <Grid.Resources>
                    <Style x:Key="GooglePolylineStyle" TargetType="Polyline">
                        <Setter Property="StrokeThickness" Value="30"/>
                    </Style>

                    <Style x:Key="GoogleLineDataPointStyle" TargetType="chartingToolkit:LineDataPoint">
                        <Setter Property="Background" Value="#0077CC" />
                        <Setter Property="BorderBrush" Value="White"/>
                        <Setter Property="BorderThickness" Value="30"/>
                        <Setter Property="IsTabStop" Value="False"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="chartingToolkit:LineDataPoint">
                                    <Grid x:Name="Root" Opacity="1">
                                        <ToolTipService.ToolTip>
                                            <StackPanel Margin="2,2,2,2">
                                                <ContentControl Content="{TemplateBinding IndependentValue}" 
                                            ContentStringFormat="{}{0:MMMM d, yyyy}"/>
                                                <ContentControl Content="{TemplateBinding DependentValue}" 
                                            ContentStringFormat="Visits {0:###,###,###}"/>
                                            </StackPanel>
                                        </ToolTipService.ToolTip>
                                        <Ellipse StrokeThickness="{TemplateBinding BorderThickness}" 
                                         Stroke="{TemplateBinding BorderBrush}" 
                                         Fill="{TemplateBinding Background}"/>
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>

                </Grid.Resources>
                <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <Label Content="Real Time Graph" VerticalAlignment="Top" Grid.Row="0" />
                    <chartingToolkit:Chart Grid.Row="1" 
                                           Name="RTGraph" 
                                           BorderThickness="0" >

                    </chartingToolkit:Chart>
                </Grid>

        </Grid>



    </DockPanel>
</Window>

Ответы [ 4 ]

3 голосов
/ 14 сентября 2010

Как говорит SeeSharp, Snoop позволяет вам просматривать дерево объектов во время выполнения (и изменять значения, видеть результаты и т. Д.). Тем не менее, я думаю, что ваша проблема может заключаться в том, что вы явно не применяете стиль к объекту <chartingToolkit:Chart />.

Попробуйте одно из следующих действий, чтобы понять, имеет ли это значение:

Применить стиль к объекту:

<chartingToolkit:Chart
    ...
    Style="{DynamicResource GoogleLineDataPointStyle}"
    ...
    >

Или удалите ключ из стиля, чтобы он имел только атрибут TargetType (должен сделать его стилем по умолчанию для всех объектов этого типа:

<Style TargetType="chartingToolkit:LineDataPoint">
    ...
</Style>
2 голосов
/ 14 сентября 2010

Поскольку вы указали стили x:Key.вам нужно явно установить свойство стиля ваших элементов, чтобы использовать этот стиль в качестве ресурса.

Вы пытались удалить свойства x: Key из вашего стиля и переместить объявление стиля из сетки в диаграмму

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

См. Окно вывода в VS.Все ошибки привязки регистрируются в этом окне.Также инструмент Snoop позволяет видеть привязки с ошибками.

1 голос
/ 14 сентября 2010

Если это приложение WPF, я хотел бы предложить одну глупую вещь.Простите за это.Пожалуйста, скопируйте и вставьте тот же код в приложение silverlight, а затем осмотрите элемент с помощью Firebug.

Кроме того, в вашем фрагменте кода, я думаю, вам нужно дать:

TargetType="{x:Type Polyline}"

TargetType="{x:Type chartingToolkit:LineDataPoint}"

Если вы хотите, чтобы эти стили автоматически применялись к целевому типу, удалите ключ x:.

Также вы можете найти список полезных WPFутилиты @ http://www.simple -talk.com / dotnet / .net-tools / essential-tools-for-the-wpf-novice /

...