我有下面的DataTemplate,它根据DirType决定显示什么.png。目前,如果我们得到DirType为3,我们会显示./images/file.png
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=DirType}" Value="0">
<Setter Property="Image.Source" TargetName="img" Value="./Images/MyComputer.jpg"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=DirType}" Value="1">
<Setter Property="Image.Source" TargetName="img" Value="./Images/diskdrive.png"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=DirType}" Value="2">
<Setter Property="Image.Source" TargetName="img" Value="./Images/folder.png"></Setter>
<Setter Property="Text" TargetName="ObjType" Value="File Folder"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=DirType}" Value="3">
<Setter Property="Image.Source" TargetName="img" Value="./Images/file.png"></Setter>
<Setter Property="Text" TargetName="ObjType" Value="{Binding Ext}"></Setter>
<Setter Property="Visibility" TargetName="ObjSize" Value="Visible"></Setter>
<Setter Property="Text" TargetName="ObjSize" Value="{Binding Size}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True" >
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
然后我在ListBox中使用它:
<ListBox x:Name="dirList" Grid.ColumnSpan="3" IsSynchronizedWithCurrentItem="True"
ItemTemplate="{StaticResource DirViewTemplate}" BorderThickness="0"
HorizontalContentAlignment="Left" VerticalContentAlignment="Top"
Grid.Column="0" Grid.Row="1"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
SelectedItem="{Binding Path=CurrentItem,Mode=OneWayToSource}"
MouseDoubleClick="dirList_MouseDoubleClick"
KeyDown="dirList_KeyDown">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" ItemWidth="220"></WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
现在,我想根据文件类型动态更改文件类型值= 3显示的图像。在所有文件在列表框中显示相同的图标之前,但现在我希望它们拉出Windows资源管理器中显示的图标。我尝试在将项添加到列表时动态访问DataTemplate,但我无法使其工作。
有什么建议吗?
答案 0 :(得分:0)
使用 MultiDataTrigger 。这定义了许多条件,对于要应用的触发器设置器,所有这些条件都评估为真。
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=DirType}" Value="3" />
<Condition Binding="{Binding Path=Ext}" Value="txt" />
</MultiDataTrigger.Conditions>
<Setter TargetName="img" Property="Source" Value="./Images/txt-file.png" />
</MultiDataTrigger>
这里有两个条件,一个绑定到DirType
属性值,另一个绑定到Ext
属性值。如果DirType
是&#34; 3&#34;并且Ext
是&#34; txt&#34;然后将应用setter(即图像源将更改为使用不同的图像文件)。
只需重复XAML中的触发器,更改绑定值,即可处理其他文件类型。