Этот вопрос жестоко сложно задавать ясным образом.Но я буду стараться изо всех сил ...
В заголовке "фон полосы прокрутки" означает область дорожки, как показано на следующем изображении (явно украдено у https://www.codeproject.com/Articles/41787/Creating-a-Blend-like-Scrollbar).
Части полосы прокрутки
По-видимому, stackoverflow не позволяет мне вставлять изображения. Поэтому я надеюсь, что приведенная выше ссылка работает.
Кроме того, слово "динамически" в заголовкеэто не означает замену одного изображения ресурса другим. Это означает создание изображения в памяти и назначение его полосе прокрутки во время выполнения.
Я собрал простой проект, чтобы продемонстрировать, что я пытаюсь сделать.Вот снимок экрана.
Снимок экрана с желаемым эффектом
Подождите! Стоп. Пожалуйста, не предлагайте "обрабатывать" приложение стороннего производителя, например Winmerge или что-то еще.Помните, что это всего лишь демонстрационное приложение, которое поможет донести идею. Мое настоящее приложение не сравнивает текстовые файлы, хотя конечный результат будет очень похожим.
Вот немного XAML моего демонстрационного приложения.
<Grid>
<DataGrid Name="dgDiffs" AutoGenerateColumns="False">
<DataGrid.Resources>
<Style TargetType="ScrollBar">
<Setter Property="Background">
<Setter.Value>
<!--<ImageBrush ImageSource="{Binding overview}" />-->
<ImageBrush ImageSource="overview.png" />
</Setter.Value>
AsВы можете видеть, я жестко запрограммировал изображение для демонстрации (Overview.png).Вы также можете увидеть, где я пытался привязать источник изображения к объекту в C #.Идея состоит в том, что я программно создаю растровое изображение, показывающее обзор, а затем обновляю полосу прокрутки.
И вот где я застрял.Я попытался создать простые растровые объекты и залить их сплошными цветами, но они не отображаются на моей полосе прокрутки.Я даже не уверен, что выбрал правильный подход.
Вот мой демонстрационный код, пытающийся использовать растровый объект.
public partial class MainWindow : Window {
class DiffItem {
public int diff { get; set; } // used to color grid row (highlight differences)
public string leftString { get; set; }
public string rightString { get; set; }
}
public MainWindow() {
InitializeComponent();
// build a lengthy list for demonstration
List<DiffItem> diffList = new List<DiffItem>();
for (int i = 0; i < 10; i++) {
// I've chopped out a bunch of lines here. This just builds a long repeating list for the demo
diffList.Add(new DiffItem() { diff = 0, leftString = "one", rightString = "one" });
diffList.Add(new DiffItem() { diff = -1, leftString = "four", rightString = "" });
diffList.Add(new DiffItem() { diff = 1, leftString = "", rightString = "eight" });
diffList.Add(new DiffItem() { diff = 2, leftString = "eleven", rightString = "elven" });
diffList.Add(new DiffItem() { diff = 0, leftString = "sixteen", rightString = "sixteen" });
}
// display list
dgDiffs.ItemsSource = diffList;
// update scrollbar overview
Bitmap overview = new Bitmap(20, 200);
using (Graphics g = Graphics.FromImage(overview)) {
g.Clear(Color.Green);
}
}
}
А вот XAML, пытающийся связать изображение полосы прокруткиисточник.
<Grid>
<DataGrid Name="dgDiffs" AutoGenerateColumns="False">
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding diff}" Value="2">
<Setter Property="Background" Value="Orange" />
</DataTrigger>
<DataTrigger Binding="{Binding diff}" Value="1">
<Setter Property="Background" Value="LightGreen" />
</DataTrigger>
<DataTrigger Binding="{Binding diff}" Value="-1">
<Setter Property="Background" Value="OrangeRed" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style TargetType="ScrollBar">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="{Binding overview}" />
<!--<ImageBrush ImageSource="overview.png" />-->
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding leftString}" Width="200"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding rightString}" Width="*"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>