【问题标题】:ContentControl doesn't show PolygonContentControl 不显示多边形
【发布时间】:2013-09-25 12:11:13
【问题描述】:

我正在编写一个小程序来显示不同objects 和国家/地区之间的连接状态。准确地说,这些对象是来自同一个class 的设备和部件inherited。如果这些对象之一与国家/地区之间存在联系,我将创建一个与该对象和国家/地区相关的ConnectionObject。对于设备来说,这很简单:因为设备只能以一种方式连接到一个国家/地区,所以图标总是相同的。但是为了让它更复杂一点,零件有两种连接方式:包含和排除。因此,您可以说某个国家/地区可以批准或明确禁止某个零件。为了显示这种差异,我想在代表连接(include = checkmark, exclude = cross, no connection = hide icon)ListViewItem 中绘制不同的图标。 我的图标是 ListView 的本地资源中的多边形,呈现 ConnectionObjects。将polygon 设置为附加到ListViewItem 的画布内的内容控件的资源对于设备来说效果很好,但不适用于部件。所以我尝试通过在 ContentControl 中创建一个DataTriggerpolygons 之间切换。我认为这很好,但即使图标应该所在的空间是打开的(如果没有连接,项目会缩小到包含标签的大小),也没有绘制polygon。我真的不知道为什么。说实话,我不是wpf 专家,我第一次体验这个框架。

这里有一些代码:

  1. ListView 中的资源:

    <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>
    
  2. 表示 DeviceConnections 的 ListViewItems 的工作画布:

    <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>
    
  3. 表示 partConnections 的 ListViewItems 的不工作画布:

    <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>
    

任何建议我做错了什么?

【问题讨论】:

    标签: c# wpf canvas resources polygon


    【解决方案1】:

    Remove the local value of Content 直接在 Canvas 上设置,即不要在 ContentControl 节点中设置 Content 属性即可

     <ContentControl x:Name="PartIcon" Canvas.Top="0" Canvas.Left="0">
    

    然后您的样式触发器设置器值将被设置。

    【讨论】:

    • 当我保留本地值时,图标总是显示分配的复选标记,但是当我删除它时,根本不显示任何图标。似乎只保留了图标所需的空间。我可能与依赖属性有什么关系吗?
    • 那么您在 DataTrigger 中的绑定不正确。你能检查一下你在输出窗口中是否有任何绑定错误?否则你将不得不分享你的整个 UI 代码
    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2014-09-05
    • 1970-01-01
    相关资源
    最近更新 更多