我对编程相对较新(至少使用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;,因此可以用作显示为标签的内容?
道歉可能有点令人困惑的帖子。我将非常感谢任何帮助!