如何在形状内添加文字或标签?

时间:2016-05-25 13:23:40

标签: c# wpf xaml

我对编程相对较新(至少使用WPF)。目前,我正在尝试创建一个图表设计器。我已经看了一下这个指南:http://www.codeproject.com/Articles/24681/WPF-Diagram-Designer-Part。 我使用Part4作为我自己项目的基础。

现在我想拥有"名称标签"或形状标签(?)(下图)。我已经获得了形状的标签,但问题是:

  • 每个形状都有相同的文字。而不是那样,我想要每个形状的个人名称。

  • 只有在将对象拖放到画布上时才会显示文本。它不会显示在左侧的列表(StackPanel)中。 Here is a picture of what I mean.

我知道,文本将是各种形状,因为它被添加到" DesignerItem样式"中。这是因为我无法用其他任何方式使用它。

以下是该项目的一些代码:

在FlowChartStencils.xaml中创建形状:

<Brush x:Key="ItemStroke">Black</Brush>
<LinearGradientBrush x:Key="ItemBrush" StartPoint="0,0" EndPoint="0,1" Opacity="1">
<LinearGradientBrush.GradientStops>
  <GradientStop Color="Lavender" Offset="0.01" />
  <GradientStop Color="Salmon" Offset="0.5" />
  <GradientStop Color="Red" Offset="1" />
</LinearGradientBrush.GradientStops>

</LinearGradientBrush>
  <Style x:Key="FlowChartItemStyle" TargetType="Path">
    <Setter Property="Fill" Value="{StaticResource ItemBrush}"/>
    <Setter Property="Stroke" Value="{StaticResource ItemStroke}"/>
    <Setter Property="StrokeThickness" Value="0.2"/>
    <Setter Property="StrokeLineJoin" Value="Round"/>
    <Setter Property="Stretch" Value="Fill"/>
    <Setter Property="IsHitTestVisible" Value="False"/>
    <Setter Property="SnapsToDevicePixels" Value="True"/>
</Style>

<Style x:Key="Process" TargetType="Path" BasedOn="{StaticResource FlowChartItemStyle}">
    <Setter Property="Data" Value="M 0,0 V60 H50 V0 Z" />
</Style>

<Style x:Key="Process_DragThumb" TargetType="Path" BasedOn="{StaticResource Process}">
    <Setter Property="IsHitTestVisible" Value="true"/>
    <Setter Property="Fill" Value="Transparent"/>
    <Setter Property="Stroke" Value="Transparent"/>
</Style>

我可以以某种方式直接将标签/文本块(或类似)添加到上面显示的代码中吗?或者有更好的方法来创建和编辑这样的正方形/矩形?

我在DesignerItem.xaml中添加的标签:

<ControlTemplate x:Key="LabelDecoratorTemplate" TargetType="{x:Type Control}">
    <Grid Margin="0,5,5,0">
        <Label x:Name="ItemLabel" VerticalAlignment="Top" HorizontalAlignment="Right" Content="HELLO"/>
    </Grid>
</ControlTemplate>


<!-- DesignerItem Style -->
<Style TargetType="{x:Type s:DesignerItem}">
    <Setter Property="MinWidth" Value="20"/>
    <Setter Property="MinHeight" Value="20"/>
    <Setter Property="SnapsToDevicePixels" Value="True"/>        
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type s:DesignerItem}">
                <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"
                      ContextMenu="{StaticResource DesignerItemContextMenu}">
                    ...
                    ...
                    <!-- PART_Label -->
                    <Control x:Name="PART_Label"
                             Visibility="Visible"
                             Template="{StaticResource LabelDecoratorTemplate}"
                             IsHitTestVisible="False"/>
                             ...
                             ...

是否可以获得&#34; Key&#34; - 来自每个形状的属性,在这种情况下它将是&#34; Process&#34;,因此可以用作显示为标签的内容?

道歉可能有点令人困惑的帖子。我将非常感谢任何帮助!

0 个答案:

没有答案