代码之家  ›  专栏  ›  技术社区  ›  Greg

为什么这个XAML重写模板不起作用

  •  1
  • Greg  · 技术社区  · 14 年前

    关于为什么我的wpfxaml代码不起作用的任何想法。我正在尝试覆盖WPFToolkit图表显示,并采用了它们的默认XAML并包含在我的网格资源节作为覆盖的一种方式。具体来说,我想删除图形标记,但这个具体问题涉及到澄清我对XAML的理解,询问为什么这些具体方法不起作用:

    -我试着把可见性隐藏在网格元素中,但这似乎不起作用?为什么会这样?

    (二) 尝试删除标签中的所有行,但这不起作用。为什么会这样?这不应该压倒一切。我想知道我的整个覆盖模板是否真的适用于LineDataPoint?(我注意到我在下面的代码中使用的LineSeries覆盖仍然有效)

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

    编辑:

    <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 回复  |  直到 14 年前
        1
  •  2
  •   Jay    14 年前

    LineDataPoint可能不可模板化,或者至少不完全模板化,因为它的许多样式属性都是在内部定义的。

    TemplateBinding

    也有可能你看到的并不是控件本身的背景,而是控件内部组成控件的背景。如果设计的组件没有“通过”属性,那么在控件本身上设置值不会影响您看到的内部部分。

    最后,有可能 Chart LineDataPoint