我在数据绑定到Image
的源属性方面遇到了一些问题。
我有ListView
模板
<Style x:Key="ListViewStyle" TargetType="{x:Type ListView}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate x:Key="ListViewItemTemplate">
<StackPanel Width="60" Margin="5,5,10,5">
<Image Height="40" Width="40" Source="{Binding XPath=@Image}"
HorizontalAlignment="Center"/>
<TextBlock Text="{Binding XPath=@Name}" TextAlignment="Center"
TextWrapping="Wrap" FontWeight="bold"
HorizontalAlignment="Center" Margin="0,0,0,1" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
此Style
在资源字典文件中定义,该文件在app.xaml中添加。 (因此可以在任何地方访问)。
现在我有一个窗口,我已将此样式用于ListVew
。
在WindowResources中,我创建了一个xmldatasource提供程序:
<XmlDataProvider x:Key="MyData" XPath="/Reports">
<x:XData>
<Reports xmlns="">
<Item Name = "Item1" Image="Resources\MenuIcons\Pic1.png"/>
<Item Name = "Item2" Image="Resources\MenuIcons\Pic2.png"/>
<Item Name = "Item3" Image="Resources\MenuIcons\Pic3.png"/>
</Reports>
</x:XData>
</XmlDataProvider>
我已将此数据源指定为ItemsSource
的{{1}}:
Listview
我的问题是,当我运行应用程序<ListView Name="MyListView" Style="{DynamicResource ListViewStyle}"
ItemTemplate="{StaticResource ListViewItemTemplate}"
ItemsSource="{Binding Source={StaticResource MyData},XPath=Item}"/>
时,文本正在显示,但ListViewItem
丢失..
但是当我在Window.Resource 中定义了这个Image
并使用Style作为StaticResource而不是Dynamic Resource时,一切正常。
任何人都可以告诉我没有放弃Style
的原因吗?我想全局使用这种风格(所以我需要在ResourceDictionary中定义它)。任何人都可以帮助我吗?
答案 0 :(得分:1)
我认为没有人回答你的问题,因为我们看不出任何错误。
我决定尝试重现您的问题,但即使我尝试按照您的重复步骤操作,您的代码也能正常运行。
以下是我的步骤:
<Style>
代码粘贴到<ResourceDictionary>
代码<Window.Resources>
元素添加到 Window1.xaml <XmlDataProvider>
代码粘贴到<Window.Resources>
代码Image="Resources\MenuIcons\Pic1.jpg"
变为Image="TestImage.jpg"
<ListView>
代码粘贴到<Grid>
代码ItemTemplate
值,假设这是旧代码遗留下来的以下是App.xaml的相关标记:
<Application
...>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
当我运行应用程序时,我看到一个ListBox包含下面带有文本的图像。
此时我建议您尝试重现我的步骤,看看您的示例是否有效。如果是这样,请尝试慢慢改变,就像你的应用程序无法正常工作。在某些时候,您将发现有关您的应用程序的不同之处。那么也许我们可以给你一些更好的建议来解决它。
答案 1 :(得分:0)
嗯..我发现了问题...问题是我的样式字典文件和图像在项目目录中的2个单独的目录中。我在样式目录中保存了所有字典文件,在资源目录中保存了样式目录之外的所有图像。 所以我需要将xml中的Image路径更改为
<XmlDataProvider x:Key="MyData" XPath="/Reports">
<x:XData>
<Reports xmlns="">
<Item Name = "Item1" Image="..\Resources\MenuIcons\Pic1.png"/>
<Item Name = "Item2" Image="..\Resources\MenuIcons\Pic2.png"/>
<Item Name = "Item3" Image="..\Resources\MenuIcons\Pic3.png"/>
</Reports>
</x:XData>
</XmlDataProvider>
(我应该添加.. \前路径)这解决了我的问题..感谢Ray Burns的回复.. - Sasikumar D.R. 0