2010-04-14 2 views
2

Привет, у меня есть список, и я хочу, чтобы внешние кнопки прокручивали список. Как я могу добиться этого. спасибо за помощь и примеры.WPF C# Listbox внешние кнопки прокрутки

+0

что вы имеете в виду внешними? – dada686

+0

Как у вас есть список слева. с множеством вертикальных предметов. то на правой стороне я хочу 2 кнопки. одна кнопка вниз и кнопка вверх. когда я нажимаю на эти кнопки, списки просматривают вниз или вверх. – Tan

ответ

2

Добавить обработчики для кнопок мыши:

private void buttonUp_Click(object sender, RoutedEventArgs e) { 
    if (listBox1.SelectedIndex > 0) 
    listBox1.SelectedIndex--; 
    listBox1.ScrollIntoView(listBox1.SelectedItem); 

    } 

    private void buttonDown_Click(object sender, RoutedEventArgs e) { 
    if (listBox1.SelectedIndex < listBox1.Items.Count - 1) 
    listBox1.SelectedIndex++; 
    listBox1.ScrollIntoView(listBox1.SelectedItem); 
    } 
+0

Это не прокрутка, а выбор элементов (вверх или вниз), чтобы позволить ручке управления прокручивать себя (при необходимости). – RvdK

+0

Это общая идея. Во всяком случае, я добавил код прокрутки к моему примеру. – majocha

+0

soory, но он, похоже, не работает. есть ли другие способы? – Tan

1

XAML

<Window x:Class="WpfApplication36.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="479" Width="385"> 
<Grid Margin="10"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="*"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
    </Grid.RowDefinitions> 

    <ListBox Name="lstProducts" 
      DisplayMemberPath="ModelName" 
      IsSynchronizedWithCurrentItem="True" 
      ScrollViewer.VerticalScrollBarVisibility="Hidden"> 

    </ListBox> 

    <Border Grid.Row="1" 
      Padding="5" 
      Margin="0,5,0,5" 
      Background="LightSteelBlue"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"></ColumnDefinition> 
       <ColumnDefinition></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="*"></RowDefinition> 
      </Grid.RowDefinitions> 

      <TextBlock Margin="7">Model Number:</TextBlock> 
      <TextBox Margin="5" 
        Grid.Column="1" 
        Text="{Binding Path=ModelNumber}"></TextBox> 
      <TextBlock Margin="7" 
         Grid.Row="1">Model Name:</TextBlock> 
      <TextBox Margin="5" 
        Grid.Row="1" 
        Grid.Column="1" 
        Text="{Binding Path=ModelName}"></TextBox> 
      <TextBlock Margin="7" 
         Grid.Row="2">Unit Cost:</TextBlock> 
      <TextBox Margin="5" 
        Grid.Row="2" 
        Grid.Column="1" 
        Text="{Binding Path=UnitCost}"></TextBox> 
      <TextBlock Margin="7,7,7,0" 
         Grid.Row="3">Description:</TextBlock> 
      <TextBox Margin="7" 
        Grid.Row="4" 
        Grid.Column="0" 
        Grid.ColumnSpan="2" 
        TextWrapping="Wrap" 
        VerticalScrollBarVisibility="Visible" 
        Text="{Binding Path=Description}"></TextBox> 
     </Grid> 
    </Border> 

    <Grid Grid.Row="2"> 
     <StackPanel Orientation="Horizontal"> 
      <Button Name="cmdPrev" 
        Click="cmdPrev_Click">&lt;</Button> 
      <TextBlock Margin="5,0,5,0" 
         Name="lblPosition" 
         VerticalAlignment="Center"></TextBlock> 
      <Button Name="cmdNext" 
        Click="cmdNext_Click">&gt;</Button> 
     </StackPanel> 
    </Grid> 
</Grid> 

Код

namespace WpfApplication36{ 
/// <summary> 
/// Interaction logic for Window1.xaml 
/// </summary> 
public partial class Window1 : Window 
{ 
     private ICollection<Product> products; 
    private ListCollectionView view; 
    private void cmdNext_Click(object sender, RoutedEventArgs e) 
    {  
     view.MoveCurrentToNext();   
    } 
    private void cmdPrev_Click(object sender, RoutedEventArgs e) 
    { 
     view.MoveCurrentToPrevious(); 
    } 

    private void lstProducts_SelectionChanged(object sender, RoutedEventArgs e) 
    { 
     // view.MoveCurrentTo(lstProducts.SelectedItem); 
    } 

    private void view_CurrentChanged(object sender, EventArgs e) 
    { 
     lblPosition.Text = "Record " + (view.CurrentPosition + 1).ToString() + 
      " of " + view.Count.ToString(); 
     cmdPrev.IsEnabled = view.CurrentPosition > 0; 
     cmdNext.IsEnabled = view.CurrentPosition < view.Count - 1; 
    } 
    public Window1() 
    { 
     InitializeComponent(); 

     products = AddProduct() ; 

     this.DataContext = products; 
     view = (ListCollectionView)CollectionViewSource.GetDefaultView(this.DataContext); 
     view.CurrentChanged += new EventHandler(view_CurrentChanged); 

     lstProducts.ItemsSource = products;    

    } 

    private Collection<Product> AddProduct() 
    { 

     Collection<Product> test = new Collection<Product>(); 
     Product prod=null; 

     prod=new Product(); 
     prod.ModelName ="BMW"; 
      prod.ModelNumber ="Q234"; 
       prod.Description="BMWWWWWWWWWWWW"; 
        prod.UnitCost="$3333333"; 
        test.Add(prod); 

        prod = new Product(); 
        prod.ModelName = "BMW11"; 
        prod.ModelNumber = "Q234111"; 
        prod.Description = "BMWWbbb"; 
        prod.UnitCost = "$3333333"; 
        test.Add(prod); 

        prod = new Product(); 
        prod.ModelName = "BM3W"; 
        prod.ModelNumber = "Q233334"; 
        prod.Description = "BMWb33bbb"; 
        prod.UnitCost = "$3333333"; 
        test.Add(prod); 
     return test; 
    } 



} 

public class Product 
{ 
    private string modelNumber; 
    public string ModelNumber 
    { 
     get {return modelNumber; } 
     set{ modelNumber=value; } 
    } 
    private string modelName; 
    public string ModelName 
    { 
     get {return modelName; } 
     set{ modelName=value ;} 
    } 
    private string unitCost; 
    public string UnitCost 
    { 
     get { return unitCost; } 
     set { unitCost = value; } 
    } 
    private string description; 
    public string Description 
    { 
     get { return description; } 
     set { description = value; } 
    } 


} 

}

0

Heres my Code guys! Спасибо за помощь

 private void btnArrowUp_Click(object sender, RoutedEventArgs e) { 
     if(lbZones.SelectedIndex > 0) { 
      lbZones.SelectedIndex--; 
      lbZones.ScrollIntoView(lbZones.SelectedIndex); 
     } 
    } 

    private void btnArrowDown_Click(object sender, RoutedEventArgs e) { 
     if(lbZones.SelectedIndex < lbZones.Items.Count - 1) { 
      lbZones.SelectedIndex++; 
      lbZones.ScrollIntoView(lbZones.SelectedIndex); 
     } 
    } 

И ЭРВО МОФ

<Button Template="{StaticResource EmptyButton}" Name="btnArrowUp" Click="btnArrowUp_Click"> 
               <Canvas x:Name="ArrowUp" HorizontalAlignment="Left" VerticalAlignment="Top" Width="101" Height="72" ClipToBounds="True"> 
                <Image x:Name="up" Width="100" Height="50" Source="pil 3_Images\Image.png" Canvas.Left="0" Canvas.Top="10.543"/> 
               </Canvas> 
              </Button> 
+0

Обычно вам не требуется холст, чтобы поместить изображение в кнопку. Так оно работает наконец? – majocha

+0

Прошу прощения, но это не прокрутка вниз или вверх. Есть ли другие способы? – Tan

+0

вы допустили ошибку в своем коде. lbZones.ScrollIntoView (lbZones.SelectedIndex); должен быть lbZones.ScrollIntoView (lbZones.SelectedItem); Опубликовать остальную часть вашего XAML не только кнопку. У меня возникло ощущение, что может быть больше проблем. Также вы можете создать упрощенную упрощенную выборку без пользовательских стилей, заставить ее работать, а затем работать с ней. – majocha

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