Я работаю над созданием приложения с очень специфическим графическим интерфейсом. Мое приложение содержит TreeView с полосой прокрутки. К сожалению, полоса прокрутки очень проста и выглядит как обычная полоса прокрутки Windows. Мне нужно, чтобы он более точно соответствовал текстурам пользовательского интерфейса, которые я использую в своем приложении, но не могу понять, как правильно отредактировать Thumb, чтобы он принимал .png.
Скрипт .xaml
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
namespace TestAPP
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
// Scroll up when up arrow is clicked
private void UpArrow_Click(object sender, RoutedEventArgs e)
{
MyScrollViewer.LineUp(); // Scroll one line up
}
// Scroll down when down arrow is clicked
private void DownArrow_Click(object sender, RoutedEventArgs e)
{
MyScrollViewer.LineDown(); // Scroll one line down
}
// Handle scroll changes (you can manually adjust the thumb size or handle any visual logic here)
private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
// Optional: Add any additional logic to manage thumb movement or other scroll events.
}
}
public class ScrollThumbConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length < 3 || !(values[0] is double verticalOffset) || !(values[1] is double scrollableHeight) || !(values[2] is double viewportHeight))
{
return new TranslateTransform(0, 0); // Default transform
}
// Calculate the thumb's position
double trackHeight = scrollableHeight + viewportHeight; // Total track height
double ratio = scrollableHeight > 0 ? verticalOffset / scrollableHeight : 0;
double thumbPosition = ratio * (trackHeight - viewportHeight); // Calculate thumb position
return new TranslateTransform(0, thumbPosition);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class ThumbHeightConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length < 2 || !(values[0] is double viewportHeight) || !(values[1] is double scrollableHeight))
{
return 50.0; // Default thumb height if values are missing
}
// Calculate the thumb height as a ratio of the viewport to the total scrollable height
double totalHeight = scrollableHeight + viewportHeight;
double thumbHeight = (viewportHeight / totalHeight) * viewportHeight;
return Math.Max(20, thumbHeight); // Ensure a minimum thumb height for usability
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Кстати, я работаю с .xaml (WPF) и C#. Ниже я добавил тестовую версию скрипта, с которым работаю. Стрелки работают и выглядят именно так, как я хочу, но я не могу правильно отобразить большой палец. Что я делаю не так?
Я работаю над созданием приложения с очень специфическим графическим интерфейсом. Мое приложение содержит TreeView с полосой прокрутки. К сожалению, полоса прокрутки очень проста и выглядит как обычная полоса прокрутки Windows. Мне нужно, чтобы он более точно соответствовал текстурам пользовательского интерфейса, которые я использую в своем приложении, но не могу понять, как правильно отредактировать Thumb, чтобы он принимал .png. Скрипт .xaml [code]
[/code] .xaml.cs скрипт [code]using System.Globalization; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Media;
namespace TestAPP { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }
// Scroll up when up arrow is clicked private void UpArrow_Click(object sender, RoutedEventArgs e) { MyScrollViewer.LineUp(); // Scroll one line up }
// Scroll down when down arrow is clicked private void DownArrow_Click(object sender, RoutedEventArgs e) { MyScrollViewer.LineDown(); // Scroll one line down }
// Handle scroll changes (you can manually adjust the thumb size or handle any visual logic here) private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e) { // Optional: Add any additional logic to manage thumb movement or other scroll events. } }
public class ScrollThumbConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values.Length < 3 || !(values[0] is double verticalOffset) || !(values[1] is double scrollableHeight) || !(values[2] is double viewportHeight)) { return new TranslateTransform(0, 0); // Default transform }
// Calculate the thumb's position double trackHeight = scrollableHeight + viewportHeight; // Total track height double ratio = scrollableHeight > 0 ? verticalOffset / scrollableHeight : 0; double thumbPosition = ratio * (trackHeight - viewportHeight); // Calculate thumb position
return new TranslateTransform(0, thumbPosition); }
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
public class ThumbHeightConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values.Length < 2 || !(values[0] is double viewportHeight) || !(values[1] is double scrollableHeight)) { return 50.0; // Default thumb height if values are missing }
// Calculate the thumb height as a ratio of the viewport to the total scrollable height double totalHeight = scrollableHeight + viewportHeight; double thumbHeight = (viewportHeight / totalHeight) * viewportHeight;
return Math.Max(20, thumbHeight); // Ensure a minimum thumb height for usability }
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } } [/code] Кстати, я работаю с .xaml (WPF) и C#. Ниже я добавил тестовую версию скрипта, с которым работаю. Стрелки работают и выглядят именно так, как я хочу, но я не могу правильно отобразить большой палец. Что я делаю не так?