如何將一系列顏色映射到一系列整數?如何將一系列顏色映射到整數範圍?
具體來說,我希望滑塊從深綠色變爲黃色變爲紅色。
以下代碼僅爲顏色添加陰影。
XAML:
<Window x:Class="MotoLens.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MotoLens"
mc:Ignorable="d"
Background="Black"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:ValueToBrushConverter x:Key="ValueToBrushConverter" />
</Window.Resources>
<Grid>
<Slider x:Name="Slider" Grid.Row="0" Minimum="0" Maximum="200" Background="{Binding RelativeSource={RelativeSource Self}, Path=Value, Converter={StaticResource ValueToBrushConverter}, ConverterParameter=0~200}"
TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="TopLeft" />
</Grid>
</Window>
ValueConverter:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var args = parameter as string;
var minimumInput = int.Parse(args?.Split('~')?[0]);
var maximumInput = int.Parse(args?.Split('~')?[1]);
var currentValue = (double)value;
var colorValue = (int)255 - (currentValue * (COLOR_RANGE_MAX/maximumInput));
var color = Color.FromArgb(COLOR_RANGE_MAX, 0, System.Convert.ToByte(colorValue), 0);
return new SolidColorBrush(color);
}
注: 我的記憶告訴我,我應該讓框架通過動畫爲我做的。 不確定它是彩色動畫還是雙動畫。
通過回答更新時間:
namespace MotoLens
{
class ValueToBrushConverter : IValueConverter
{
static readonly Color[] _colorTable =
{
Color.FromRgb( 0, 255, 255),
Color.FromRgb( 0, 255, 0),
Color.FromRgb(255, 255, 0),
Color.FromRgb(255, 0, 0),
};
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var args = parameter as string;
var minimumInput = int.Parse(args.Split('~')[0]);
var maximumInput = int.Parse(args.Split('~')[1]);
var currentValue = ((double)value - minimumInput)/(maximumInput - minimumInput);
var col1 = (int)(currentValue * (_colorTable.Length - 1));
var col2 = Math.Min(col1 + 1, (_colorTable.Length - 1));
var t = 1.0/(_colorTable.Length - 1);
return new SolidColorBrush(Lerp(_colorTable[col1], _colorTable[col2], (currentValue - t * col1)/t));
}
public static Color Lerp(Color col1, Color col2, double t)
{
var r = col1.R * (1 - t) + col2.R * t;
var g = col1.G * (1 - t) + col2.G * t;
var b = col1.B * (1 - t) + col2.B * t;
return Color.FromRgb((byte)r, (byte)g, (byte)b);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
請看我更新的帖子。 –
那麼問題得到了滿意的回答?還是有其他要求?順便說一句我[這篇文章]的答案(http://stackoverflow.com/questions/32513387/how-to-create-a-color-canvas-for-color-picker-wpf)關於顏色選擇器可能也有興趣在這種情況下,您通常會使用諸如色相欄之類的東西作爲滑塊的背景。 –
是的。現在我有一個新的問題:http://stackoverflow.com/questions/35760507/how-can-i-create-a-gauge-i-e-speedometer –