(使用 VS 2010)我是 WPF 的新手,正在尝试创建一个 TreeViewItem,它显示 2 个图像,然后是一些文本。为此,我正在使用 StackPanel。我希望根据模型属性的更改显示/隐藏第一张图像,因此我添加了一个触发器以将其宽度设置为 0:
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal" Margin="2" SnapsToDevicePixels="True" Width="Auto">
<Image Width="16" Height="16">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding LinkType}" Value="Co">
<Setter Property="Source" Value="/Images/Image1.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding LinkType}" Value="Post">
<Setter Property="Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Image Source="/Images/Image2.png"
Width="15"
Height="15"
SnapsToDevicePixels="True" Margin="3,0"/>
<TextBlock Text="{Binding Name}" Margin="5,0" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
这实际上隐藏了图像,但留下了一个空白 - 堆栈面板中的剩余项目不会向左滑动以解释第一张图像的“移除”。我还尝试以相同的结果触发 Visibility。
有没有办法可以在 StackPanel 中添加/删除、显示/隐藏或更改 width=0 等项目,以便其余项目相应地重新调整它们的位置?或者有没有比 stackpanel 更好的容器呢?