2011-02-02 4 views
3

У меня есть элемент управления списком, в котором элементы добавляются с помощью пользовательского элемента управления с текстовым блоком и изображением.Невозможно прокрутить список в WP7

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
FontFamily="{StaticResource PhoneFontFamilyNormal}" 
FontSize="{StaticResource PhoneFontSizeNormal}" 
Foreground="{StaticResource PhoneForegroundBrush}" 
d:DesignHeight="52" d:DesignWidth="480"> 

<Grid x:Name="LayoutRoot" Background="{StaticResource PhoneChromeBrush}"> 
    <TextBlock Height="30" HorizontalAlignment="Left" Margin="12,10,0,0" Name="Index_itemtext" Text="" VerticalAlignment="Top" Width="145" /> 
    <Image Height="34" HorizontalAlignment="Right" Margin="0,6,55,0" Source="blue_triangle.png" Name="IndexList_itemImage" Stretch="Uniform" VerticalAlignment="Top" Width="66" /> 
    <Line Height="10" HorizontalAlignment="Left" Margin="0,38,0,0" Name="seperator_line" Stroke="White" StrokeThickness="2" VerticalAlignment="Top" Width="480" Stretch="Fill" Fill="#FFF5E9E9" /> 
</Grid> 

И список коробка XAML:

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="768"/> 
     <RowDefinition Height="0*" /> 
    </Grid.RowDefinitions> 

    <Grid Opacity="5" VerticalAlignment="Top" Grid.Row="0"> 
     <Grid.Background> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#FF282828" Offset="0.366" /> 
       <GradientStop Color="#FE848484" Offset="1" /> 
      </LinearGradientBrush> 
     </Grid.Background> 

     <Button Content="Top" Grid.Column="0" HorizontalAlignment="Left" Grid.Row="0" VerticalAlignment="Top" Height="72" Name="Top_btn" Width="114" BorderBrush="{x:Null}" Click="topbutton_Click" Style="{StaticResource ButtonStyle1}" >    
      <Button.Background> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="#FF908585" Offset="0.11" /> 
        <GradientStop Color="#FF342E2E" Offset="1" /> 
       </LinearGradientBrush> 
      </Button.Background> 
     </Button> 

     <Button Content="Back" Height="72" Grid.Column="1" Grid.Row="0" Name="Back_btn" Width="104" HorizontalAlignment="Right" HorizontalContentAlignment="Center" Margin="0" BorderBrush="{x:Null}" Click="backbutton_Click" Style="{StaticResource ButtonStyle1}" > 
      <Button.Background> 
       <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
        <GradientStop Color="#FF908585" Offset="0.11" /> 
        <GradientStop Color="#FF342E2E" Offset="1" /> 
       </LinearGradientBrush> 
      </Button.Background> 
     </Button> 
    </Grid> 

      <ListBox Name="Index_list" ScrollViewer.VerticalScrollBarVisibility="Visible" VerticalContentAlignment="Top" SelectionChanged="on_selection" Margin="0,78,0,0" Height="Auto"> 
     <ListBoxItem Style="{StaticResource ListBoxItemStyle}"> 


     </ListBoxItem> 
    </ListBox> 



</Grid> 

Теперь, когда я добавить элементы в список, вертикальная прокрутка не идет до последнего пункта/нижней части списка не достижимый, т. е. возвращается к первому ряду, который останавливается от последнего выбора предмета:

for (int i = 0; i < gridSize; i++) 
      { 
       listbox_item list_item = new listbox_item(); 
       list_item.Index_itemtext.FontSize = 25; 
       list_item.Index_itemtext.Text = index[i]; 
       list_item.IndexList_itemImage.Source = new BitmapImage(new Uri("some.png", UriKind.Relative)); 
       list_item.seperator_line.StrokeThickness = 5; 
       list_item.Margin = new Thickness(0, 0, 0, 5); 
       Index_list.Items.Add(list_item); 
      } 

Также список строка не занимает ширину устройства в ландшафтном режиме, тогда как требование состоит в том, что элемент строки расширяется по мере изменения ширины устройства. Кто-нибудь может помочь с этими проблемами?

ответ

3

Положив код, который вы показали до сих пор в примере проекта, у меня нет проблем, которые вы описываете при прокрутке, поэтому я предполагаю, что есть другие элементы на странице, а также ListBox, которые влияют макета и, следовательно, прокрутки.

Как упоминалось выше, проблема с изменением ориентации заключалась в том, чтобы использовать элементы фиксированной ширины, которые можно разрешить с помощью столбцов ширины столбцов, как описано в Automatic Rotation Support or Automatic Multi-Orientation Layout Support for Windows Phone на блоге разработчиков Windows Phone.

Еще один момент, стоит сделать в том, что если вы на самом деле не имеют определенную логику, связанную с этим элементы, которые вы создали listbox_itemUserControl для, вы можете реализовать схему, указав ItemTemplate свойство ListBox, а затем вы можете просто создать список объектов данных и привязать их к свойству ItemsSource. Например.

<ListBox x:Name="Index_list" 
     HorizontalContentAlignment="Stretch" 
     Margin="0,78,0,0" 
     SelectionChanged="on_selection" 
     VerticalContentAlignment="Top"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <Grid Background="{StaticResource PhoneChromeBrush}"> 
      <!-- Column definitions here. --> 
      <TextBlock Height="30" HorizontalAlignment="Left" Text="{Binding Label}" VerticalAlignment="Top" /> 
      <Image Height="34" HorizontalAlignment="Right" Margin="0,6,55,0" Source="{Binding ImagePath}" Stretch="Uniform" VerticalAlignment="Top" Width="66" /> 
      <Line Height="10" HorizontalAlignment="Stretch" Margin="0,38,0,0" Stroke="White" StrokeThickness="2" VerticalAlignment="Top" Stretch="Fill" Fill="#FFF5E9E9" /> 
     </Grid> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
0

О проблемах с ландшафтом. Вы устанавливаете свойство Width на всех элементах UserControl, чтобы они не были автоматическими.

В вопросе прокрутки вы можете перефразировать вопрос - извините, но я не уверен, что понимаю проблему - «вертикальная прокрутка не доходит до последнего элемента, т.е. возвращается к первой строке, которая останавливается от последней пункт выбора "не имеет для меня смысла - извините

+0

Извините - мне все еще не ясно. Что означает «неспособность прокрутки»? Вы имеете в виду «пользователь не может прокручивать список»? Или вы имеете в виду «Я хочу программно выбрать, какой элемент в данный момент отображается»? – Stuart

+0

Я имел в виду, что когда пользователь прокручивает список, чтобы разбить нижний элемент списка, он не достигает нижнего элемента в списке. – Shaireen

+0

вы можете разместить всю свою страницу XAML? Если вы не видите нижнюю часть ListBox, то каким-то образом, чтобы ListBox располагался так, чтобы нижняя часть была ниже нижней части экрана. – Stuart

0

Метод ListBox.ScrollIntoView позволяет прокручивать ListBox для просмотра определенного элемента. Кроме того, с помощью WP7 ListBox, если вы выберете элемент, он автоматически прокручивается в представлении.

Что касается Вашего вопроса о с строками, вам нужно установить ListBoxItemsStyle следующим образом:

<Style x:Key="ListBoxItemStyle" TargetType="ListBoxItem"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     <Setter Property="HorizontalAlignment" Value="Stretch"/> 
    </Style> 

И удалить вашу жесткую кодировку ширину в шаблоне.

+0

Thanx много для урского ответа ... Я действительно использовал Wat, но все же нижний элемент списка недоступен при прокрутке. – Shaireen

Смежные вопросы