我将一个集合(rss feed)绑定到一个列表框中,如下所示:
<ListBox Margin="0,0,-12,0" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<HyperlinkButton Content={Binding Title} NavigateUri="{Binding Link}" />
<TextBlock Text="{Binding Description}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这很好用 - 数据显示正确等等。但是现在当我将其更改为使用文本换行时,标题不再显示。
这是有问题的代码。
<ListBox Margin="0,0,-12,0" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<HyperlinkButton NavigateUri="{Binding Link}">
<TextBlock Text="{Binding Title}" TextWrapping="Wrap" />
</HyperlinkButton>
<TextBlock Text="{Binding Description}" TextWrapping="Wrap" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我认为这不是造成问题的“TextWrapping”属性,因为我试过没有它,但它仍然无法正常工作。所以我的问题是你如何得到这样的东西?我只想显示包装绑定文本的超链接。看起来这是一件相当简单的事情 - 但还是那么难。帮助
答案 0 :(得分:7)
我遇到了完全相同的问题,直到this blog Mister Goodcat {{3}}发布{{3}}后,我才明白为什么它无法正常工作。在他的帖子中他说,由于对Silverlight中的WP7进行了一些优化,在普通Silverlight中运行的基本功能对于WP7 Silverlight无法正常工作。而不是使用他建议修改样式而不是。
编辑默认模板的最简单方法仍然是使用Expression Blend制作它的副本并从那里开始工作。当你这样做时,你会发现模板实际上只有一个文本块来显示内容。这就是为什么使用另一个UI元素作为内容不适用于WP7上的超链接按钮。如果您只想进行文本换行,则只需更改该文本块上的TextWrapping属性即可。
<Style x:Key="HyperlinkButtonWrappingStyle"
TargetType="HyperlinkButton">
<Setter Property="Foreground"
Value="{StaticResource PhoneForegroundBrush}" />
<Setter Property="Background"
Value="Transparent" />
<Setter Property="FontSize"
Value="{StaticResource PhoneFontSizeMedium}" />
<Setter Property="Padding"
Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="HyperlinkButton">
<Border Background="Transparent">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver" />
<VisualState x:Name="Pressed">
<Storyboard>
<DoubleAnimation Duration="0"
To="0.5"
Storyboard.TargetProperty="Opacity"
Storyboard.TargetName="TextElement" />
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground"
Storyboard.TargetName="TextElement">
<DiscreteObjectKeyFrame KeyTime="0"
Value="{StaticResource PhoneDisabledBrush}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border Background="{TemplateBinding Background}"
Margin="{StaticResource PhoneHorizontalMargin}"
Padding="{TemplateBinding Padding}">
<TextBlock x:Name="TextElement"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Text="{TemplateBinding Content}"
TextDecorations="Underline"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
TextWrapping="Wrap" />
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我建议阅读他的博客文章了解更多信息&amp;救命。
答案 1 :(得分:1)
上面显示的代码在SL4中运行良好,但在Windows Phone 7中运行不正常;主要是出于性能原因。使用Blend编辑HyperlinkButton样式,您会发现Hyperlink按钮已经使用TextBlock进行内容显示并添加TextWrapping =“Wrap”属性。