WPF - 如何确定此XAML样式代码无法正常工作的原因?

时间:2010-09-14 06:43:38

标签: c# .net wpf xaml wpftoolkit

任何建议如何找出错误,找出为什么这个XAML中的Grid.Resources样式在最终结果中没有任何区别?

注意我正在使用WPFToolkit中的图表,因此要调整图表的外观,似乎必须应用样式区域(论坛上有人建议)。

所以我的问题一般来说,注意我正在尝试调整第三方图的外观,我如何调试/故障查找以了解出现了什么问题?有调试技巧吗?例如,当我将BorderThickness增加到30时,我看不出有什么区别。我真正想要的是相当于FireBug for 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 个答案:

答案 0 :(得分:3)

正如SeeSharp所说,Snoop允许您在运行时查看对象树(并更改值并查看结果等)。但是,我认为您的问题可能是您没有在<chartingToolkit:Chart />对象上明确应用该样式。

尝试以下方法之一,看看它是否有所作为:

在对象上应用样式:

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

或者从样式中删除键,使其只具有TargetType属性(应该使其成为该类型所有对象的默认样式:

<Style TargetType="chartingToolkit:LineDataPoint">
    ...
</Style>

答案 1 :(得分:2)

请参阅VS中的输出窗口。此窗口中记录的所有绑定错误。此外,tool Snoop还可以看到绑定错误。

答案 2 :(得分:2)

因为你给了样式x:Key。您需要显式设置项目的样式属性以将该样式用作资源。

您是否尝试从样式中删除x:Key属性,并将样式声明从网格中移动到图表中?

答案 3 :(得分:1)

如果这是一个WPF应用程序,我想建议一个愚蠢的事情。对不起,请原谅。请将相同的代码复制并粘贴到silverlight应用程序中,然后使用Firebug检查元素。

此外,在您的代码段中,我认为您需要提供:

TargetType="{x:Type Polyline}"

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

如果您希望自动将这些样式应用于目标类型,请删除x:Key。

此外,您还可以找到有用的WPF实用程序列表@ http://www.simple-talk.com/dotnet/.net-tools/essential-tools-for-the-wpf-novice/

相关问题