模板绑定到父级的内容,该内容本身绑定到 XPath - 内容未显示



我有一个ItemsControl,其ItemsSource绑定到XML数据提供程序。代码如下所示。

<ItemsControl Grid.Row="1" Margin="30"
ItemsSource="{Binding Source={StaticResource VideosXML}, 
XPath=TutorialVideo}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Style="{StaticResource StyleMetroVideoButton}" 
Content="{Binding XPath=@Name}"
ToolTip="{Binding XPath=Description}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>                        
</ItemsControl>

VideosXML是一个引用外部XML文件的XML数据提供程序。正如您所看到的,Name属性应用于按钮的内容,xml文件中的Description元素应用于按钮工具提示。下面是按钮样式的代码。它基本上是一个文本块,上面有一个褪色的"播放"按钮

<Style TargetType="{x:Type Button}" x:Key="StyleMetroVideoButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid Name="PlayGrid" Background="#FF323236">
<TextBlock TextWrapping="Wrap" Text="{TemplateBinding Content}" VerticalAlignment="Top" HorizontalAlignment="Center"/>
<Image Name="Play" Source="{StaticResource BtnVideoPlayHoverPNG}"  Opacity="0.0" Stretch="None"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="0.6" TargetName="Play"/>
<Setter Property="Background" Value="#8D8D94" TargetName="PlayGrid"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Source" Value="{StaticResource BtnVideoPlayClickPNG}" TargetName="Play"/>
<Setter Property="Opacity" Value="0.6" TargetName="Play"/>
<Setter Property="Background" Value="#8D8D94" TargetName="PlayGrid"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.0" TargetName="Play"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Width" Value="90" />
<Setter Property="Height" Value="80" />
<Setter Property="Margin" Value="5,5,5,5"/>
</Style>

您可以从样式中看到,TextBlock中的"Text"绑定到按钮本身的内容:Text="{TemplateBinding content}",从第一段代码中,按钮的content通过XPath绑定到XML元素。但是,根本没有显示任何文本。如果我在按钮中硬编码一些东西,比如Content="A button"将显示,它就会起作用。此外,工具提示工作正常,所以我知道它正在从XML文件中读取数据。那么,是什么让绑定到XPath与硬编码值不同呢?

提前谢谢你看我的问题!

编辑:示例XML

<?xml version="1.0" encoding="utf-8" ?>
<Videos xmlns="">
<TutorialVideo Name="Video 1">
<Description>A video to watch</Description>
<Filepath>video1.wmv</Filepath>
</TutorialVideo>
</Videos>

好的,我发现了问题,由于某种原因,Content属性正在传递整个xml元素,将Content绑定设置为Content="{Binding XPath=@Name, Path=Value}"应该可以解决问题

对此可能有一个合乎逻辑的解释,谷歌会知道

<ItemsControl Grid.Row="1" Margin="30"
ItemsSource="{Binding Source={StaticResource VideosXML}, 
XPath=TutorialVideo}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Style="{StaticResource StyleMetroVideoButton}"  
Content="{Binding XPath=@Name, Path=Value}"  
ToolTip="{Binding XPath=Description}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

相关内容

  • 没有找到相关文章

最新更新