wpf 图外图例

31moq8wy  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(124)

你知道怎样把图例放到绘图区之外吗?2(用代码和xaml)
谢谢你的帮助!
顺式

1dkrff03

1dkrff031#

当前D3库中没有将图例移到绘图仪外部的实现。最多只能通过编辑源代码中的Legend.xaml.cs文件,将图例移到绘图仪中的其他位置。您必须更改代码隐藏中的依赖属性,才能在绘图仪区域周围移动图例。
如果您想将图例置于绘图仪之外,您必须重新创建Legend.xaml,使其独立于绘图仪,但仍能接收到创建图例所需的相同信息。如果您确实做到了这一点,请将其发布在此处作为答案!

ccrfmcuu

ccrfmcuu2#

也许答案来得有点晚,但我也碰到了这个问题。
这是微软的风格研究动态数据显示绘图仪

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                    xmlns:local="clr-namespace:Microsoft.Research.DynamicDataDisplay"
                    xmlns:common="clr-namespace:Microsoft.Research.DynamicDataDisplay.Common">
  <Style x:Key="defaultPlotterStyle" TargetType="{x:Type local:Plotter}">
    <Setter Property="Control.Background" Value="White"/>
    <Setter Property="Control.BorderBrush" Value="Black"/>
  </Style>
  <ControlTemplate x:Key="defaultPlotterTemplate" TargetType="{x:Type local:Plotter}">
    <common:NotifyingGrid Name="PART_ContentsGrid" Background="{TemplateBinding Control.Background}">
      <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition/>
        <RowDefinition Height="auto"/>
      </Grid.RowDefinitions>
      <common:NotifyingStackPanel Name="PART_HeaderPanel" Orientation="Vertical" Grid.Row="0"/>
      <common:NotifyingGrid Name="PART_MainGrid" Row="1">
        <Grid.RowDefinitions>
          <RowDefinition Height="auto"/>
          <RowDefinition/>
          <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="auto"/>
          <ColumnDefinition/>
          <ColumnDefinition Width="auto"/>
        </Grid.ColumnDefinitions>
        <common:NotifyingGrid Name="PART_CentralGrid" Column="1" Row="1" ClipToBounds="true" Background="Transparent"/>
        <common:NotifyingCanvas Name="PART_MainCanvas" Grid.Column="1" Grid.Row="1" ClipToBounds="true"/>
        <Rectangle Name="PART_ContentBorderRectangle" Grid.Column="1" Grid.Row="1"
                   Stroke="{TemplateBinding Control.BorderBrush}"
                   StrokeThickness="{TemplateBinding Control.BorderThickness}"/>
        <common:NotifyingStackPanel Name="PART_LeftPanel" Grid.Column="0" Grid.Row="1" Orientation="Horizontal"/>
        <common:NotifyingStackPanel Name="PART_RightPanel" Grid.Column="2" Grid.Row="1" Orientation="Horizontal"/>
        <common:NotifyingStackPanel Name="PART_BottomPanel" Grid.Column="1" Grid.Row="2" Orientation="Vertical"/>
        <common:NotifyingStackPanel Name="PART_TopPanel" Grid.Column="1" Grid.Row="0" Orientation="Vertical"/>
      </common:NotifyingGrid>
      <common:NotifyingCanvas Name="PART_ParallelCanvas" Grid.Column="1" Grid.Row="1"/>
      <common:NotifyingStackPanel Name="PART_FooterPanel" Orientation="Vertical" Grid.Row="2"/>
    </common:NotifyingGrid>
  </ControlTemplate>
</ResourceDictionary>

因此,技巧是您必须修改图例的父级及其父级属性,以将所需的元素以正确的大小移动到正确的位置。
PART_CentralGrid元素包含图例项。
我执行了以下操作:

legendGrandparent.Width = plotter.Width - 100;
legendGrandparent.HorizontalAlignment = HorizontalAlignment.Left;
legendParent.ClipToBounds = false;
legend.LegendLeft = plotter.Width - 125;

其中,图例祖节点是零件主网格,图例父节点是零件中心网格。
之前:

之后:

相关问题