You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF Dynamic Data Display图例显示异常及隐藏问题求助

解决方案

针对自定义图例样式失效问题

将自定义DataTemplate从LegendItemsPanel.Resources移至Chart.Resources层级,确保图表初始化时能正确识别并应用模板。同时保证模板的x:Key严格匹配目标类型的完整名称(此处为InteractiveDataDisplay.WPF.LineGraph)。

针对单个图例隐藏问题

  1. 给每个需要控制图例显示的LineGraph/PolygonGraph添加绑定属性(如IsLegendVisible)
  2. 在图例DataTemplate中,将StackPanel的Visibility绑定到该属性,配合BoolToVisibilityConverter实现显示控制
  3. 对于不需要显示图例的图表元素,直接不设置Description属性即可自动隐藏(如代码中MinMaxValues对应的PolygonGraph)

修改后的代码示例

<DataTemplate DataType="{x:Type viewModels:PlotResultWithTest}">
    <wpf:Chart BottomTitle="{Binding XAxisTitle}" LeftTitle="{Binding YAxisTitle}">
        <!-- 将DataTemplate移至Chart.Resources -->
        <wpf:Chart.Resources>
            <DataTemplate x:Key="InteractiveDataDisplay.WPF.LineGraph">
                <StackPanel Orientation="Horizontal" 
                            Visibility="{Binding Path=Tag.IsLegendVisible, Converter={StaticResource BoolToVisibility}}">
                    <Line Width="15" Height="15" X1="0" Y1="0" X2="15" Y2="15" 
                          Stroke="{Binding Path=Stroke}" StrokeThickness="2"/>
                    <TextBlock Margin="5 0 0 0" Text="{Binding Path=Description}"/>
                </StackPanel>
            </DataTemplate>
            <!-- 为PolygonGraph添加对应自定义模板 -->
            <DataTemplate x:Key="YourNamespace.PolygonGraph">
                <StackPanel Orientation="Horizontal" 
                            Visibility="{Binding Path=Tag.IsLegendVisible, Converter={StaticResource BoolToVisibility}}">
                    <Rectangle Width="15" Height="15" Margin="0 0 5 0" 
                               Fill="{Binding Path=Fill}" Stroke="{Binding Path=Stroke}"/>
                    <TextBlock Text="{Binding Path=Description}"/>
                </StackPanel>
            </DataTemplate>
        </wpf:Chart.Resources>

        <wpf:Chart.LegendContent>
            <wpf:LegendItemsPanel/>
        </wpf:Chart.LegendContent>

        <Interactions:Interaction.Behaviors>
            <behaviors:ChartBoundsBehavior/>
        </Interactions:Interaction.Behaviors>

        <wpf:Chart.ContextMenu>
            <ContextMenu DataContext="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
                <MenuItem Header="Reset" Command="{Binding ChartBounds.EnableAutoFitCommand}" />
            </ContextMenu>
        </wpf:Chart.ContextMenu>

        <Grid>
            <!-- 无Description,自动隐藏图例 -->
            <controls:PolygonGraph Points="{Binding MinMaxValues, Mode=OneTime}" Stroke="{x:Null}" Fill="Transparent"/>

            <!-- 绑定IsLegendVisible属性控制图例显示 -->
            <wpf:LineGraph Points="{Binding FlTestValues, Mode=OneTime}" 
                           Description="{Binding FlTestDescription}" 
                           Stroke="{StaticResource FlightTestColor}" 
                           StrokeThickness="2" 
                           Visibility="{Binding FlTestVisible, Converter={StaticResource BoolToVisibility}}"
                           Tag="{Binding}"/>

            <controls:PolygonGraph Points="{Binding FlTestBoundValues, Mode=OneTime}" 
                                  Description="FT Tolerance" 
                                  Stroke="Gray" StrokeThickness="1" 
                                  Visibility="{Binding FlTestBoundsVisible, Converter={StaticResource BoolToVisibility}}"
                                  Tag="{Binding}">
                <controls:PolygonGraph.Fill>
                    <SolidColorBrush Color="Blue" Opacity="0.03"/>
                </controls:PolygonGraph.Fill>
            </controls:PolygonGraph>

            <wpf:LineGraph Points="{Binding MasterValues, Mode=OneTime}" 
                           Description="{Binding MasterDescription}" 
                           Stroke="{StaticResource MasterColor}" 
                           StrokeThickness="2" 
                           Visibility="{Binding MasterVisible, Converter={StaticResource BoolToVisibility}}"
                           Tag="{Binding}"/>

            <controls:PolygonGraph Points="{Binding MasterBoundValues, Mode=OneTime}" 
                                  Description="Master Tolerance" 
                                  Stroke="Gray" 
                                  Visibility="{Binding MasterBoundsVisible, Converter={StaticResource BoolToVisibility}}"
                                  Tag="{Binding}">
                <controls:PolygonGraph.Fill>
                    <SolidColorBrush Color="Magenta" Opacity="0.03"/>
                </controls:PolygonGraph.Fill>
            </controls:PolygonGraph>

            <ItemsControl ItemsSource="{Binding ValuesList}" Visibility="{Binding ResultVisible, Converter={StaticResource BoolToVisibility}}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Grid/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <!-- 无Description,自动隐藏图例 -->
                        <wpf:LineGraph Points="{Binding FinalValues, Mode=OneTime}" 
                                       StrokeThickness="2" 
                                       Stroke="{Binding GoodValues, Converter={StaticResource ColorConverter}}" 
                                       Visibility="{Binding ResultVisible, Converter={StaticResource BoolToVisibility}}"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

            <wpf:LineGraph Points="{Binding Values, Mode=OneTime}" 
                           Description="{Binding Header}" 
                           Stroke="{StaticResource RecordingColor}" 
                           StrokeThickness="2" 
                           Visibility="{Binding ResultVisible, Converter={StaticResource BoolToVisibility}}"
                           Tag="{Binding}"/>
        </Grid>
    </wpf:Chart>
</DataTemplate>

补充说明

  1. 若使用InteractiveDataDisplay.WPF库,图例条目由图表元素的Description属性驱动,无Description的元素不会生成图例项
  2. 若需要更灵活的图例控制,可自定义附加属性替代Tag绑定,避免与其他业务逻辑冲突
  3. 确保BoolToVisibilityConverter已在资源中正确定义

内容的提问来源于stack exchange,提问作者simone paolucci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:55:02