2010-11-16 77 views
6

我綁定的集合(RSS Feed)整合到一個列表框像這樣:如何使用數據綁定爲內容/文本設置HyperlinkBut​​ton的包裝?

<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

我有完全相同的代碼作爲DataGrid Header的一部分進行包裝,並且工作正常。 – Stephan 2010-11-16 21:55:25

+0

我不知道爲什麼你的網格工作,我的不是。我只是使用VS 2010中的全景項目的啓動項目模板,並基本上將TextBlock基本更改爲HyperlinkBut​​ton。 – 2010-11-17 20:55:43

回答

7

我有完全相同的問題,我不明白爲什麼它不工作,直到我遇到this blogMister Goodcat。在他的文章中他表示,由於在Silverlight中對WP7進行了一些優化,所以在普通Silverlight中工作的基本功能對於WP7 Silverlight無法正常工作。相反,他建議修改Style而不是。

編輯默認模板的最簡單方法仍然是使用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> 

我建議閱讀他的博客以獲取更多信息&幫助。

+0

哇 - 終於...謝謝你謝謝你... – 2011-05-23 17:24:16

相關問題