2008-10-06 22 views
93

Tất cả quá thường xuyên tôi muốn có một thanh trượt WPF hoạt động như System.Windows.Forms.TrackBar cũ. Đó là, tôi muốn một thanh trượt đi từ X đến Y nhưng chỉ cho phép người dùng di chuyển nó ở vị trí số nguyên rời rạc.Làm cách nào để bạn thực hiện thanh trượt WPF chỉ với các vị trí số nguyên rời rạc?

Làm cách nào để thực hiện điều này trong WPF vì thuộc tính Giá trị trên Thanh trượt gấp đôi?

Trả lời

82

Nếu bạn đặt dấu tick của bạn một cách đúng đắn, bạn có thể sử dụng IsSnapToTickEnabled. Điều này làm việc khá tốt cho tôi. Xem MSDN để biết chi tiết.

136

Câu trả lời đơn giản là bạn tận dụng lợi thế của IsSnapToTickEnabledTickFrequency tài sản. Tức là, hãy xoay nhanh để đánh dấu vào và đặt tần suất đánh dấu thành 1.

Hay nói cách khác ... tận dụng các dấu tích ... nhưng bạn không nhất thiết phải hiển thị các dấu tích mà bạn đang chụp đến.

Kiểm tra các mảnh sau XAML:

<Slider 
    Orientation="Vertical" 
    Height="200" 
    Minimum="0" 
    Maximum="10" 
    Value="0" 
    IsSnapToTickEnabled="True" 
    TickFrequency="1" 
/> 
+1

Câu trả lời này phải là câu trả lời được chấp nhận. Làm việc như một say mê. Cảm ơn – Ashbay

+0

Cảm ơn @Ashbay ... vào thời điểm đó, tôi muốn cung cấp cho người khác tín dụng cho câu trả lời ... thay vì chỉ đánh dấu câu trả lời của riêng tôi là được chấp nhận. – cplotts

42

Đối với những người muốn gắn vào vị trí cụ thể, bạn cũng có thể sử dụng Ticks tài sản:

<Slider Minimum="1" Maximum="500" IsSnapToTickEnabled="True" Ticks="1,100,200,350,500" /> 
8

Bí quyết chụp là tiện dụng nhưng có những hạn chế, ví dụ nếu bạn muốn chỉ hiển thị một tập hợp con các dấu tích hợp lệ. Tôi đã thành công với hai lựa chọn thay thế: hoặc liên kết với một số nguyên hoặc làm tròn giá trị mới. Dưới đây là ví dụ được kết hợp:

public int MyProperty { get; set; } 

private void slider1_ValueChanged(object sender, 
    RoutedPropertyChangedEventArgs<double> e) 
{ 
    (sender as Slider).Value = Math.Round(e.NewValue, 0); 
} 

<Slider 
    Name="slider1" 
    TickPlacement="TopLeft" 
    AutoToolTipPlacement="BottomRight" 
    ValueChanged="slider1_ValueChanged" 
    Value="{Binding MyProperty}" 
    Minimum="0" Maximum="100" SmallChange="1" LargeChange="10" 
    Ticks="0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100"/> 

Tôi không biết hiệu suất của việc so sánh với mẹo chụp như thế nào nhưng tôi chưa gặp bất kỳ sự cố nào *.

* Nếu bạn cũng liên kết giá trị của thanh trượt với loại trường văn bản bạn sẽ trải nghiệm, mỗi lần trong một thời gian nếu sử dụng chuột, trường văn bản sẽ hiển thị số thập phân. Nếu bạn cũng liên kết với một int cùng một lúc thì chuỗi rỗng sẽ làm cho một ngoại lệ chuyển đổi bị ném xuống một thời gian ngắn. Những vấn đề này chưa đủ để tôi tìm kiếm giải pháp.

+0

Vì vậy, điều này cho phép người dùng cũng có các giá trị khác trên thanh trượt? Hay nó vẫn chỉ cho phép giá trị của bọ ve được chọn. Loại câu hỏi kỳ lạ ... hy vọng bạn hiểu những gì tôi đang hỏi. – JLott

+1

@ JLott: Bạn vẫn có thể chỉ chụp các giá trị 'Ticks' (0, 10, 20, ...) nhưng tất cả các giá trị ở giữa (1, 2, ...) hợp lệ và có thể được chọn với ví dụ: phím mũi tên. – mkjeldsen

+0

Ôi gọn gàng. Tôi không nhận ra rằng ... Cảm ơn! – JLott

Các vấn đề liên quan