这就是我建立的目标:
在每个ListBoxItem的右侧应该有3个图像,但正如您所看到的,它们只显示在最后一行。我使用的ContentControl引用了我从SyncFusion Metro Studio中获取的XAML形状(导出为XAML)。
我应该使用其他东西吗?
这是我的XAML:
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition
Height="auto" />
<RowDefinition
Height="auto" />
</Grid.RowDefinitions>
<DockPanel
Grid.Row="0">
<TextBlock
DockPanel.Dock="Left"
Margin="0 0 6 0">
<TextBlock.Text>
<MultiBinding
StringFormat="{}{0:D2}:{1:D2}:">
<Binding
Path="Task.Schedule.StartTime.Hours" />
<Binding
Path="Task.Schedule.StartTime.Minutes" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<ContentControl
Content="{StaticResource CM.Done}"
DockPanel.Dock="Right" />
<ContentControl
Content="{StaticResource CM.Comment}"
DockPanel.Dock="Right" />
<ContentControl
Content="{StaticResource CM.Important}"
DockPanel.Dock="Right" />
<TextBlock
Text="{Binding Task.Name}" />
</DockPanel>
<TextBlock
Grid.Row="1"
Foreground="Gray"
FontStyle="Italic"
Text="{Binding Status, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource StatusEnumToStringConverter}}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
以下是1张图片的示例:
<Viewbox
x:Key="CM.Important">
<Grid
Width="24"
Height="24"
Visibility="Visible">
<Path
Data="M2.4915056,2.2260001C3.8691173,2.2260004,4.9830005,3.3431869,4.9830005,4.7181533L4.9830005,52.518807C4.9830005,53.897702 3.8691173,55.010998 2.4915056,55.010998 1.1132736,55.010998 0,53.897702 0,52.518807L0,4.7181533C0,3.3431869,1.1132736,2.2260004,2.4915056,2.2260001z M21.916903,2.1072685E-05C34.563281,-0.013741149 44.850898,6.7199533 60.671,0.96500372 60.671,11.992384 60.671,23.027636 60.671,34.061489 39.577531,41.738621 28.30889,27.205954 8.1920012,36.075898L8.1920012,2.9753833C13.223898,0.75891303,17.701443,0.0046082785,21.916903,2.1072685E-05z"
Stretch="Uniform"
Fill="#FFFF0000"
Width="12"
Height="12"
Margin="0,0,0,0"
RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<TransformGroup>
<TransformGroup.Children>
<RotateTransform
Angle="0" />
<ScaleTransform
ScaleX="1"
ScaleY="1" />
</TransformGroup.Children>
</TransformGroup>
</Path.RenderTransform>
</Path>
</Grid>
</Viewbox>
答案 0 :(得分:3)
这是正常行为:您不能在WPF中显示两倍于相同的UI对象。在这里,您尝试显示相同ViewBox
常见的解决方法是:
1 - 将您的ViewBox
Resources
更改为Templates
:
<ControlTemplate x:Key="CM.Important" TargetType="{x:Type Control}">
<Viewbox>
<!-- Your ViewBox content -->
</Viewbox>
</ControlTemplate>
2-将您的ContentControls
更改为Controls
:
<Control Template="{StaticResource CM.Important}" />
除非Path
添加一些歧义
答案 1 :(得分:1)
根据您的评论,您使用CM.*
引用的静态资源是ViewBoxes。 ViewBox
是一个控件,一个控件只能有一个父控件。所以只有最后一个项目有这些图像。
您应该尝试将这些资源转换为不是控件的其他类。不幸的是,我没有真正使用路径,所以我不知道哪个类最适合他们。