【问题标题】:WPF - how to determine why this XAML style code is not working?WPF - 如何确定为什么这个 XAML 样式代码不起作用?
【发布时间】:2010-09-14 06:43:37
【问题描述】:

任何建议如何找出错误以找出为什么此 XAML 中的 Grid.Resources 样式对最终结果没有任何影响?

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

所以我的问题是笼统的,注意我正在尝试调整第 3 方图表的外观,我该如何调试/故障查找以了解出了什么问题?有调试技巧吗?例如,当我将 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>

【问题讨论】:

    标签: c# .net wpf xaml wpftoolkit


    【解决方案1】:

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

    尝试以下方法之一,看看是否有效果:

    在对象上应用样式:

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

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

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

    【讨论】:

    • 哦,是的 - 这很重要,谢谢。 Re Snoop 我确实简单地尝试过,但它似乎没有用。也许是因为我的应用程序是 WPF 4?
    • 如果您指的是 TypeLoad 异常跨越本机/托管障碍,请尝试在该异常被命中后按“播放”或“运行” - 我明白了,之后它仍然运行良好(也是 WPF 4 应用程序)。稳定性不是 100%,但还是很好用的
    • 没有例外 - 只是似乎不起作用 - 可能会引发另一个关于 Snoop 的问题
    【解决方案2】:

    既然您已经为样式指定了x:Key。您需要明确设置项目的样式属性以将该样式用作资源。

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

    【讨论】:

    • 更新 - 这是一个问题,但仍然无法更改图表格式
    • 嗯,您能否更新您的问题,以便我们了解您目前正在尝试什么?这里有一些答案,了解您现在要做什么可能会有所帮助。
    • 也许我应该关闭这个问题并开始一个新问题,因为这个问题已经发生了一些变化 - 我也得到了 snoop 工作,这是一个很好的工具
    • 在这里提出问题 - stackoverflow.com/questions/3715426/…
    【解决方案3】:

    在 VS 中查看输出窗口。此窗口中记录的所有绑定错误。另外,tool Snoop 可以查看有错误的绑定。

    【讨论】:

    • 在这种情况下(我认为)更多的是关于无错误情况 - 以及模板更改是否真的正确排列以覆盖默认值 - 我认为......
    • VS 显示绑定问题。这对没有被采纳的风格有什么帮助?
    【解决方案4】:

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

    另外,在您的代码 sn-p 中,我认为您需要提供:

    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/

    【讨论】:

    • 虽然我不确定这是否会突出显示模板覆盖的位置/原因是错误/未对齐的吗?
    • 我想,如果我没记错的话,我们也可以在最新的 firebug 中检查事件和脚本渲染。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2011-04-09
    • 2018-11-05
    • 2012-02-22
    • 2023-03-03
    • 2017-10-02
    相关资源
    最近更新 更多