2010-04-14 5 views
2

안녕하세요 목록 상자가 있고 목록 상자를 스크롤하려면 외부 단추를 싶습니다. 나는 어떻게 이것을 달성 할 수 있는가? 도움과 예제에 감사드립니다.WPF C# 목록 상자 외부 스크롤 단추

+0

가 외부에 의해 무엇을 의미합니까 도움

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

그리고을 heres WPF에 대한 감사합니다? – 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!

<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