我正在寻找WPF的颜色对话框? 有没有内置的? 我应该建立自己的? 还是赢得32个互操作? 如果是这样,怎么样?是否有WPF的颜色对话框?
13
A
回答
3
继承人使用附加属性,一个简单的颜色选择器应该有人来寻找示例代码
public static class BrushExtender
{
public readonly static DependencyProperty BrushProperty = DependencyProperty.RegisterAttached("Brush", typeof(Brush), typeof(BrushExtender), new PropertyMetadata(Brushes.Black,DoBrushChanged));
public readonly static DependencyProperty RedChannelProperty = DependencyProperty.RegisterAttached("RedChannel", typeof(int), typeof(BrushExtender), new PropertyMetadata(DoColorChangedRed));
public readonly static DependencyProperty GreenChannelProperty = DependencyProperty.RegisterAttached("GreenChannel", typeof(int), typeof(BrushExtender), new PropertyMetadata(DoColorChangedGreen));
public readonly static DependencyProperty BlueChannelProperty = DependencyProperty.RegisterAttached("BlueChannel", typeof(int), typeof(BrushExtender), new PropertyMetadata(DoColorChangedBlue));
public readonly static DependencyProperty AlphaChannelProperty = DependencyProperty.RegisterAttached("AlphaChannel", typeof(int), typeof(BrushExtender), new PropertyMetadata(DoColorChangedAlpha));
public readonly static DependencyProperty ColourValueProperty = DependencyProperty.RegisterAttached("ColourValue", typeof(string), typeof(BrushExtender), new PropertyMetadata(DoValueChanged));
public static void SetRedChannel(DependencyObject o, int value)
{
o.SetValue(RedChannelProperty, value);
}
public static void SetGreenChannel(DependencyObject o, int value)
{
o.SetValue(GreenChannelProperty, value);
}
public static void SetBlueChannel(DependencyObject o, int value)
{
o.SetValue(BlueChannelProperty, value);
}
public static void SetAlphaChannel(DependencyObject o, int value)
{
o.SetValue(AlphaChannelProperty, value);
}
public static void SetBrush(DependencyObject o, SolidColorBrush brush)
{
o.SetValue(BrushProperty, brush);
}
public static void SetColourValue(DependencyObject o, string value)
{
o.SetValue(ColourValueProperty, value);
}
private static void DoColorChangedRed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var color = ((SolidColorBrush)d.GetValue(BrushProperty)).Color;
DoColorChange(d, (int)e.NewValue, c => c.R,() => Color.FromArgb(color.A, ((byte)(int)e.NewValue), color.G , color.B));
}
private static void DoColorChangedGreen(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var color = ((SolidColorBrush)d.GetValue(BrushProperty)).Color;
DoColorChange(d, (int)e.NewValue, c => c.G,() => Color.FromArgb(color.A, color.R, ((byte)(int)e.NewValue), color.B));
}
private static void DoColorChangedBlue(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var color = ((SolidColorBrush)d.GetValue(BrushProperty)).Color;
DoColorChange(d, (int)e.NewValue, c => c.B,() => Color.FromArgb(color.A, color.R, color.G, (byte)(int)e.NewValue));
}
private static void DoColorChangedAlpha(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var color = ((SolidColorBrush)d.GetValue(BrushProperty)).Color;
DoColorChange(d, (int)e.NewValue, c => c.A,() => Color.FromArgb((byte)(int)e.NewValue, color.R, color.G, color.B));
}
private static void DoColorChange(DependencyObject d, int newValue, Func<Color, int> colorCompare, Func<Color> getColor)
{
var color = ((SolidColorBrush)d.GetValue(BrushProperty)).Color;
if (colorCompare(color) == newValue)
return;
var newBrush = new SolidColorBrush(getColor());
d.SetValue(BrushProperty, newBrush);
d.SetValue(ColourValueProperty, newBrush.Color.ToString());
}
private static void DoValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var color = ((SolidColorBrush)d.GetValue(BrushProperty)).Color;
if (color.ToString() == (string)e.NewValue)
return;
Color? newColour = null;
try
{
newColour = (Color) ColorConverter.ConvertFromString((string) e.NewValue);
}
catch{}
if (newColour == null)
return;
var newBrush = new SolidColorBrush(newColour.Value);
d.SetValue(BrushProperty, newBrush);
}
private static void DoBrushChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue == e.OldValue)
return;
var colour = ((SolidColorBrush)e.NewValue).Color;
d.SetValue(RedChannelProperty,(int)colour.R);
d.SetValue(GreenChannelProperty,(int)colour.G);
d.SetValue(BlueChannelProperty,(int)colour.B);
d.SetValue(AlphaChannelProperty,(int)colour.A);
d.SetValue(ColourValueProperty,colour.ToString());
}
}
,在这里它被用来
<Window x:Class="ChannelColourBrush.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:c="clr-namespace:ChannelColourBrush" Title="Window1" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="Red" />
<TextBlock Text="Green" Grid.Row="1" />
<TextBlock Text="Blue" Grid.Row="2" />
<TextBlock Text="Alpha" Grid.Row="3" />
<Slider Name="redSlider" Grid.Column="1" Minimum="0" Maximum="255" Width="200" Height="20" Grid.ColumnSpan="2" Value="{Binding ElementName=rect, Path=(c:BrushExtender.RedChannel), Mode=TwoWay}" />
<Slider Name="greenSlider" Grid.Column="1" Grid.Row="1" Minimum="0" Maximum="255" Width="200" Height="20" Grid.ColumnSpan="2" Value="{Binding ElementName=rect, Path=(c:BrushExtender.GreenChannel), Mode=TwoWay}" />
<Slider Name="blueSlider" Grid.Column="1" Grid.Row="2" Minimum="0" Maximum="255" Width="200" Height="20" Grid.ColumnSpan="2" Value="{Binding ElementName=rect, Path=(c:BrushExtender.BlueChannel), Mode=TwoWay}" />
<Slider Name="alphaSlider" Grid.Column="1" Grid.Row="3" Minimum="0" Maximum="255" Width="200" Height="20" Grid.ColumnSpan="2" Value="{Binding ElementName=rect, Path=(c:BrushExtender.AlphaChannel), Mode=TwoWay}" />
<Rectangle Fill="SandyBrown" Name="rect" Width="200" Height="50" Grid.Row="4" Grid.ColumnSpan="3" Margin="0,20,0,10"
c:BrushExtender.Brush="{Binding RelativeSource={RelativeSource Self}, Path=Fill, Mode=TwoWay}"/>
<TextBlock Text="Colour Value" Margin="5,0,5,0" Grid.Row="5" HorizontalAlignment="Center" />
<TextBox Text="{Binding ElementName=rect, Path=(c:BrushExtender.ColourValue), Mode=TwoWay}" Margin="0,0,0,0" Grid.Row="5" Grid.Column="1" Width="100" HorizontalAlignment="Center" />
<Button Content="Update" IsEnabled="{Binding ElementName=grid, Path=SelectedItem.SomeValue}"/>
</Grid>
4
我写了一个简单的WPF颜色选择器支持以下功能一会儿回
- 3种不同类型的色样
- 不透明度滑块的
- 为开放
- 标准对话按钮
这里选择颜色
+0
这看起来非常好。如果我只能显示色轮而不是所有其他控件,我都会使用它。 – Steven 2013-09-06 23:37:41
相关问题
- 1. 什么是WPF对话框的良好默认背景颜色?
- 2. 颜色对话框没有显示
- 3. 如何改变对话框的颜色
- 4. 设置对话框的“暗淡”颜色
- 5. WPF组合框的颜色
- 6. WPF SystemColors:TextBox边框的颜色
- 7. Android ICS对话框标题颜色
- 8. PhpStorm输入对话框颜色
- 9. Qt颜色选择对话框,如gcolor2
- 10. 从颜色对话框中禁用颜色
- 11. 是否可以在Applescript的对话框中设置文本的颜色?
- 12. 是否有“笔”类来补充WPF中的“笔刷”和“颜色”?
- 13. CDialog的背景颜色和该对话框中的所有控件都是白色而不是灰色
- 14. 检测是否有对话框打开
- 15. 如何更改对话框的边框颜色?
- 16. 更改对话框微调框的popupbackground颜色
- 17. 更改Android中对话框标题周围框架的颜色
- 18. WPF xaml绑定组合框背景颜色为SelectedItem的颜色
- 19. 如何在对话框中自定义android中CheckMark颜色的颜色。 :android
- 20. JavaScript在对话框加载后设置对话框标题栏颜色
- 21. Windows窗体:颜色对话框纯色只
- 22. 如何更改ngTagsInput的边框颜色是否带有焦点?
- 23. ASP.NET的jQuery的改变表行的颜色后confrim对话框
- 24. Android的自定义对话框的TextView和背景颜色
- 25. WPF组合框禁用背景颜色
- 26. WPF组合框颜色绑定问题
- 27. WPF列表框选择颜色
- 28. 在WPF卸载对话框
- 29. WPF Documentviewerbase.Print。删除对话框
- 30. 使用CSS更改jQuery对话框的背景颜色
真的... WPF ...和没有颜色选择器...什么... – serhio 2010-09-29 12:16:29
检查[扩展WPF到olkit](http://wpftoolkit.codeplex.com/),它是WPF控件的集合。 – jwillmer 2012-04-18 08:27:10
[Extended WPF Toolkit](http://wpftoolkit.codeplex.com/)中有一个[ColorPicker Control](http://wpftoolkit.codeplex.com/wikipage?title=ColorPicker),它可以放在对话。 – SpeedCoder5 2014-03-06 20:13:14