ContentControl 不显示多边形
本文关键字:多边形 显示 ContentControl | 更新日期: 2023-09-27 18:32:40
我正在编写一个小程序来显示不同objects
和国家之间的联系状态。准确地说,这些对象是来自同一class
inherited
的设备和零件。如果其中一个对象与国家/地区之间存在联系,我将创建一个与该对象和国家/地区相关的ConnectionObject
。对于设备来说,这很容易:由于设备只能以一种方式连接到一个国家/地区,因此图标将始终相同。但是为了使它更复杂一些,零件有两种连接模式:包含和排除。因此,您可以说某个零件可以批准或明确禁止进入/来自一个国家/地区。为了显示这种差异,我想在代表连接(include = checkmark, exclude = cross, no connection = hide icon)
的ListViewItem
中绘制不同的图标。我的图标是呈现连接对象的ListView
的局部资源中的多边形。将polygon
设置为附加到ListViewItem
的画布内的内容控件的资源对设备非常有效,但不适用于部件。因此,我尝试通过在 ContentControl 中创建DataTrigger
来在polygons
之间切换。我认为这很好,但是即使图标应该打开的空间是开放的(如果没有连接,项目会缩小到包含标签大小(,也没有绘制polygon
。我真的不知道为什么。说实话,我不是wpf
专家,也是我第一次体验这个框架。
这里有一些代码:
-
列表视图中的 Rescources:
<UserControl.Resources> <Polygon x:Key="Checkmark" x:Shared="False" Points="0,4 4,8 12,0 12,4 4,12 0,8" Fill="#FF40C858" Stretch="Uniform"/> <Polygon x:Key="Crossmark" x:Shared="False" Points="0,0 4,0 6,4 8,0 12,0 9,6 12,12 8,12 6,8 4,12 0,12 3,6" Fill="#FFE52826" Stretch="Uniform"/> </UserControl.Resources>
-
表示设备连接的列表视图项的工作画布:
<Canvas x:Name="DatCanvas" Width="12" Height="12" Margin="4" Visibility="{Binding IconVisibility}"> <ContentControl x:Name="DeviceIcon" Content="{StaticResource Checkmark}" Canvas.Top="0" Canvas.Left="0"/> </Canvas>
-
表示部件连接的列表视图项的不工作画布:
<Canvas x:Name="DatCanvas" Width="12" Height="12" Margin="4" Visibility="{Binding IconVisibility}"> <ContentControl x:Name="PartIcon" Content="{StaticResource Crossmark}" Canvas.Top="0" Canvas.Left="0"> <ContentControl.Style> <Style TargetType="{x:Type ContentControl}"> <Style.Triggers> <DataTrigger Binding="{Binding ConnectionMode}" Value="Include"> <Setter Property="Content" Value="{StaticResource Checkmark}" /> </DataTrigger> <DataTrigger Binding="{Binding ConnectionMode}" Value="Exclude"> <Setter Property="Content" Value="{StaticResource Crossmark}" /> </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> </ContentControl> </Canvas>
有什么建议我做错了什么吗?
Remove the local value of Content
直接在画布上设置,即不要在 ContentControl 节点中设置内容属性,只需执行
<ContentControl x:Name="PartIcon" Canvas.Top="0" Canvas.Left="0">
然后,将设置样式触发器 Setter 值。