2013-10-02 21 views
5

Ho uno strano problema con lo stile del mio controllo pivot. Ho modificato una copia del modello predefinito in Expression Blend perché voglio rimuovere l'intera intestazione.Windows Phone 8: rimuovere l'intestazione pivot

Lo stile adattato:

<Style x:Key="PivotWithoutHeader" TargetType="phone:Pivot"> 
     <Setter Property="Margin" Value="0"/> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="ItemsPanel"> 
      <Setter.Value> 
       <ItemsPanelTemplate> 
        <Grid/> 
       </ItemsPanelTemplate> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="phone:Pivot"> 
        <Grid HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <Grid Background="{TemplateBinding Background}" Grid.RowSpan="3"/> 
         <!--<ContentControl ContentTemplate="{TemplateBinding TitleTemplate}" Content="{TemplateBinding Title}" HorizontalAlignment="Left" Margin="24,17,0,-7" Style="{StaticResource PivotTitleStyle}"/>--> 
         <Primitives:PivotHeadersControl x:Name="HeadersListElement" Grid.Row="1"/> 
         <ItemsPresenter x:Name="PivotItemPresenter" Margin="{TemplateBinding Padding}" Grid.Row="2"/> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

E l'uso del mio stile:

<phone:Pivot Grid.Row="1" x:Name="Objects" ItemsSource="{Binding Profiles}" 
           Style="{StaticResource PivotWithoutHeader}"> 
         <phone:Pivot.ItemContainerStyle> 
          <Style TargetType="phone:PivotItem"> 
           <Setter Property="HorizontalAlignment" Value="Stretch" /> 
          </Style> 
         </phone:Pivot.ItemContainerStyle> 
         <phone:Pivot.ItemTemplate> 
          <DataTemplate> 
           <Grid> 
            <Image Source="Resources/homer.png"/> 
            <TextBlock Text="{Binding Name}"/> 
            <TextBlock Text="#Sample" /> 
            <Button Margin="347,0,0,0" Command="{Binding DataContext.SettingsCommand, ElementName=Objects}" CommandParameter="{Binding .}" /> 
           </Grid> 
          </DataTemplate> 
         </phone:Pivot.ItemTemplate> 
        </phone:Pivot> 

Il mio pensiero era solo per rimuovere o impostare la visibilità di <Primitives:PivotHeadersControl> per crollata ma poi la mia app si blocca senza alcun eccezione e il seguente messaggio nella mia finestra di output: "Il programma '[2332] TaskHost.exe' è terminato con il codice -1073741819 (0xc0000005)" Violazione di accesso "".

Ho letto alcuni post per spostare il pivot in modo che l'intestazione sia fuori dallo schermo ma ho bisogno del mio pivot personalizzato nella parte inferiore della pagina con altri controlli sopra di esso.

Qualcuno ha un'idea di come rimuovere l'intestazione?

MODIFICA: Per chiarezza voglio rimuovere titolo e intestazione.

+1

Hai capire come fare questo? – halileohalilei

+0

Una specie di. Si prega di guardare la risposta contrassegnata. – Danscho

risposta

1

Quindi rimuovere l'intestazione e il titolo non funziona più su Windows Phone 8. Così ho portato un controllo esistente da: http://www.codeproject.com/Articles/136786/Creating-an-Animated-ContentControl a Windows Phone 8.

+0

Ho un'app universale e questo ha funzionato http://stackoverflow.com/a/19148612/169714 semplicemente non mi ha restituito il mio spazio –

+0

+1 per avere ragione su di esso non funziona, però non ho testato il controllo. – koenmetsu

2

Il modello del controllo Pivot è stato modificato in WP8 e ora è necessario che lo PivotHeadersControl sia presente nel modello. (È possibile rimuoverlo in WP7.x)
Basta avere un'altezza pari a zero o altro contenuto "vuoto" nell'intestazione.

Non sono a conoscenza di ciò che è stato pubblicamente documentato poiché la maggior parte delle persone che hanno eseguito l'upgrade a WP8 utilizza lo shim per la versione precedente del controllo. Tuttavia, ho notato questo alla fine di un articolo del blog su http://blog.mrlacey.co.uk/2013/01/pivot-and-panorama-have-moved-and.html

+0

Grazie matt per il collegamento. Vorrei rimuovere il titolo E l'intestazione. Qualche suggerimento per quello? Ho già provato a impostare l'opacità e l'altezza (il titolo è ancora qui ma è sovrapposto al contenuto del pivotitem). – Danscho

8

È possibile rimuovere l'intestazione PivotItem sul controllo pivot sostituendo la proprietà Pivot.HeaderTemplate con un DataTemplate vuoto. Se stai cercando di rimuovere il titolo anziché l'intestazione, mi piacerebbe conoscere anche la soluzione. ^^

<phone:Pivot ItemsSource="{Binding Data}" ItemTemplate="{StaticResource CustomPivotItemTemplate}"> 
    <phone:Pivot.HeaderTemplate> 
     <DataTemplate/> 
    </phone:Pivot.HeaderTemplate> 
</phone:Pivot> 
+0

Sì, mi piacerebbe rimuovere il titolo e l'intestazione. Siamo spiacenti, la mia domanda non è stata chiara a riguardo. – Danscho

+0

Sostituire HeaderTemplate con DataTemplate vuoto dovrebbe rimuovere sia l'intestazione che il titolo – PompolutZ

0

soluzione dBlisse ha funzionato per me per nascondere il modello di intestazione ma per il titolo ho giocato con i margini e il trucco in basso ha funzionato per me, non so se è una buona idea, ma ho controllato diverse risoluzioni e sembra a posto.

Avviso la Margin="0,-39,0,0" per il pannello dello stack di seguito:

<phone:Pivot Background="Transparent" Margin="-12,0"> 
    <phone:Pivot.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Margin="0,-39,0,0"> 
        YOUR CONTROLS HERE 
      </StackPanel> 
     </DataTemplate> 
    </phone:Pivot.ItemTemplate> 
    <phone:Pivot.HeaderTemplate> 
     <DataTemplate/> 
    </phone:Pivot.HeaderTemplate> 
</phone:Pivot> 
3

provare questo:

<UserControl.Resources> 
    <ResourceDictionary> 
     <Thickness x:Key="PivotPortraitThemePadding">0,0,0,0</Thickness> 
     <Thickness x:Key="PivotLandscapeThemePadding">0,0,0,0</Thickness> 
     <Style x:Key="PivotWithoutHeaderStyle" TargetType="Pivot"> 
      <Setter Property="Margin" Value="0"/> 
      <Setter Property="Padding" Value="0"/> 
      <Setter Property="Foreground" Value="{ThemeResource PhoneForegroundBrush}"/> 
      <Setter Property="Background" Value="Transparent"/> 
      <Setter Property="ItemsPanel"> 
       <Setter.Value> 
        <ItemsPanelTemplate> 
         <Grid/> 
        </ItemsPanelTemplate> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Pivot"> 
         <Grid x:Name="RootElement" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto"/> 
           <RowDefinition Height="*"/> 
          </Grid.RowDefinitions> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="Orientation"> 
            <VisualState x:Name="Portrait"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" Storyboard.TargetName="TitleContentControl"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="0"/> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Landscape"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" Storyboard.TargetName="TitleContentControl"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="0"/> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <ContentControl x:Name="TitleContentControl" ContentTemplate="{TemplateBinding TitleTemplate}" Content="{TemplateBinding Title}" Style="{StaticResource PivotTitleContentControlStyle}" Height="0"/> 
          <ScrollViewer x:Name="ScrollViewer" HorizontalSnapPointsAlignment="Center" HorizontalSnapPointsType="MandatorySingle" HorizontalScrollBarVisibility="Hidden" Margin="0" Grid.Row="1" Template="{StaticResource ScrollViewerScrollBarlessTemplate}" VerticalSnapPointsType="None" VerticalScrollBarVisibility="Disabled" VerticalScrollMode="Disabled" VerticalContentAlignment="Stretch" ZoomMode="Disabled"> 
           <PivotPanel x:Name="Panel" VerticalAlignment="Stretch"> 
            <PivotHeaderPanel x:Name="Header" Background="{TemplateBinding BorderBrush}" Height="0" Margin="0" Visibility="Collapsed"> 
             <PivotHeaderPanel.RenderTransform> 
              <CompositeTransform x:Name="HeaderTranslateTransform" TranslateX="0"/> 
             </PivotHeaderPanel.RenderTransform> 
            </PivotHeaderPanel> 
            <ItemsPresenter x:Name="PivotItemPresenter"> 
             <ItemsPresenter.RenderTransform> 
              <TranslateTransform x:Name="ItemsPresenterTranslateTransform" X="0"/> 
             </ItemsPresenter.RenderTransform> 
            </ItemsPresenter> 
           </PivotPanel> 
          </ScrollViewer> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ResourceDictionary> 
</UserControl.Resources> 

...

<Pivot Style="{StaticResource PivotWithoutHeaderStyle}"> 

...

+0

Funziona perfettamente su una soluzione Windows Phone 8.1. Credo che con un modello di dati vuoto per l'intestazione, questo può essere utilizzato anche per le app universali. Grazie! –

0

ho finalmente capito fuori! (Sto costruendo un'applicazione universale per Windows 10 e ho avuto la stessa domanda.)

Aggiungi un HeaderTemplate in bianco per i controlli Pivot come suggerito dBlisse:

<Pivot ItemsPanel="{StaticResource ItemsPanelTemplate1}"> 
    <Pivot.HeaderTemplate> 
     <DataTemplate/> 
    </Pivot.HeaderTemplate> 
</Pivot> 

e aggiungere questo modello in App.xaml:

<ItemsPanelTemplate x:Key="ItemsPanelTemplate1"> 
    <Grid Margin="0,-48,0,0"/> 
</ItemsPanelTemplate>