2010-04-14 5 views
2

Bonjour, j'ai une liste et je veux que les boutons externes défilent dans la liste. Comment puis-je obtenir cela. merci pour l'aide et les exemples.WPF C# Boutons de défilement externes Listbox

+0

qu'entendez-vous par externe? – dada686

+0

Comme un avoir une liste sur le côté gauche. avec de nombreux articles verticaux. puis sur le côté droit je veux 2 boutons. un bouton bas et un bouton haut. Lorsque je clique sur ce bouton, les listviews défilent vers le haut ou vers le bas. – Tan

Répondre

2

Ajouter les gestionnaires pour les clics de bouton:

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

Ce n'est pas un défilement, mais la sélection d'éléments (haut ou bas) pour laisser le contrôle se déplacer lui-même (si nécessaire). – RvdK

+0

C'est une idée générale de le faire. Quoi qu'il en soit, j'ai ajouté du code de défilement à mon exemple. – majocha

+0

soory mais cela ne semble pas fonctionner. Y a-t-il d'autres moyens? – 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> 

code

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 mon code les gars! Merci pour l'aide

 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); 
     } 
    } 

Et voici le WPF

<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

Vous n'avez généralement pas besoin de toile pour mettre l'image dans un bouton. Alors, ça marche enfin? – majocha

+0

Non désolé mais il ne défile pas vers le haut ou vers le bas. Y a-t-il d'autres moyens? – Tan

+0

vous avez fait une erreur dans votre code. lbZones.ScrollIntoView (lbZones.SelectedIndex); devrait être lbZones.ScrollIntoView (lbZones.SelectedItem); afficher le reste de votre XAML non seulement le bouton. J'ai le sentiment qu'il pourrait y avoir plus de problèmes. Vous pouvez également créer un échantillon simplifié dépouillé sans styles personnalisés, le faire fonctionner et ensuite travailler à partir de celui-ci. – majocha