2010-11-16 9 views
6

sto legando una collezione (feed RSS) in una casella di riepilogo di questo tipo:Come impostare il wrapping per HyperlinkButton con il databound Content/Text?

<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> 

Questa grande opera - i dati vengono visualizzati in modo corretto, ecc Ma ora quando ho cambiato per usare la disposizione del testo, il titolo è non viene più visualizzato.

Ecco il codice problematico.

<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> 

non credo che sia l'attributo "TextWrapping" che causa il problema, da quando ho provato senza di essa e che ancora non ha funzionato. Quindi la mia domanda è: come fai a far funzionare qualcosa del genere? Voglio solo visualizzare un collegamento ipertestuale con testo rilegato avvolto. Sembra una cosa abbastanza semplice da fare - ma ancora così difficile. Aiuto?

+0

Ho lo stesso codice esatto per avvolgere come parte di un componente DataGrid e funziona benissimo. – Stephan

+0

Non sono sicuro del motivo per cui la tua rete funziona e il mio no. Mi basta usare il modello di start up del progetto per il progetto panorama in VS 2010 e cambiare il TextBlock fondamentalmente per HyperlinkButton fondamentalmente. –

risposta

7

Avevo lo stesso identico problema e non riuscivo a capire perché non funzionava fino a quando non ho trovato il this blog post Mister Goodcat. Nel suo post, ha detto che a causa di alcune ottimizzazioni fatte per la WP7 in Silverlight la funzionalità di base che opera nel normale Silverlight non funziona correttamente per WP7 Silverlight. Invece di usare, suggerisce invece di modificare lo stile.

Il modo più semplice per modificare i modelli predefiniti è ancora utilizzare Expression Blend per crearne una copia e lavorare da lì. Quando lo fai, vedrai che il modello ha solo un blocco di testo per mostrare il contenuto. Ecco perché utilizzare un altro elemento dell'interfaccia utente in quanto il contenuto non funziona per il pulsante del collegamento ipertestuale su WP7. Se vuoi solo rendere il testo a capo, è sufficiente modificare la proprietà TextWrapping su quel blocco di testo.

<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> 

vi suggerisco di leggere il suo post sul blog per ulteriori informazioni & aiuto.

+0

Wow - finalmente ... grazie grazie ... –

Problemi correlati