DataTemplate仅显示最后一条记录的Canvas

时间:2015-09-01 04:36:59

标签: wpf grid datatemplate

我正在使用以下DataTemplate

package

模板使用分隔符显示所有相关数据,但仅显示最后一条记录上的图像。它会留下图像所在的空间,但没有图像。

enter image description here

2 个答案:

答案 0 :(得分:3)

确保将x:Shared="False"属性添加到资源中。

示例:

<Canvas x:Key="appbar_server" x:Shared="False">
   <!-- ... -->
</Canvas>

答案 1 :(得分:1)

这是因为您可能在资源中定义了一些Image s(例如appbar_server)并尝试在多个项目中显示它们。但ImageVisual,而WPF每个Visual只能有一个父级。因此,当您的项目生成时,每个项目都会从前一个项目中窃取Image,直到最后一个项目最终获得它。

<强>解决方案:

Image不同,BitmapImage不是Visual,因此可以多次设置为不同项目的来源。因此,不要在Image中定义Resources,而是定义BitmapImage s:

<Window.Resources>
    <BitmapImage x:Key="appbar_server" UriSource="C:\...\appbar_server.png"/>
    ....

然后代替ContentControlImage中创建DataTemplate个实例来展示它们:

            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Viewbox Width="30" Height="30" ToolTip="Network Domain Count" Stretch="Uniform">
                        <Image  Focusable="False" Source="{DynamicResource appbar_server}" />
                    </Viewbox>
                    <TextBlock Margin="0,7,0,0" Text="{Binding Path=workload_count}"/>
                    ...

<强> *更新:

  

图像是在画布中捕获的,似乎需要一些   特殊包装,使这项工作。

在这种情况下,您应为每个DataTemplate定义Canvas,如下所示:

<Window.Resources>
    <DataTemplate x:Key="appbar_3d_3ds">
        <Canvas  Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0">
            <Path Width="32" Height="40" Canvas.Left="23" Canvas.Top="18" Stretch="Fill" Fill="Black" Data="F1 M 27,18L 23,26L 33,30L 24,38L 33,46L 23,50L 27,58L 45,58L 55,38L 45,18L 27,18 Z "/>
        </Canvas>
    </DataTemplate>
    ....

然后在ContentPresenter中创建ItemTemplate个实例,并将ContentTemplate设置为预定义的数据模板(例如appbar_3d_3ds)。

            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Viewbox Width="30" Height="30" ToolTip="Network Domain Count" Stretch="Uniform">
                        <ContentPresenter ContentTemplate="{DynamicResource appbar_3d_3ds}"/>
                    </Viewbox>
                    <TextBlock Margin="0,7,0,0" Text="{Binding Path=workload_count}"/>
                    ....