Estoy buscando un cuadro de diálogo de color para WPF? ¿Hay uno incorporado? ¿Debo construir el mío? O do Win 32 interoperacion? Si es así, ¿cómo?¿Hay un cuadro de diálogo de color para WPF?
13
A
Respuesta
3
Heres un selector de color sencillo utilizando las propiedades adjuntas, alguien debería estar buscando ejemplo de código
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());
}
}
y aquí se está utilizando
<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
escribí un simple WPF color selector que admite las siguientes características un tiempo atrás
- 3 diferentes tipos de muestra de color
- control deslizante Opacidad
- ratón de control de motor para la selección de color
- Conjuntos de color actuales abiertas
- botones de diálogo estándar
Aquí está el artículo en caso lo necesita: http://www.codeproject.com/Articles/33001/WPF-A-Simple-Color-Picker-With-Preview
+0
Eso se ve muy bien. Lo usaría si pudiera mostrar la rueda de colores y no todos los otros controles. – Steven
Cuestiones relacionadas
- 1. ¿Cuál es un buen color de fondo predeterminado para un cuadro de diálogo WPF?
- 2. WPF: Crear un cuadro de diálogo/solicitud
- 3. Qt, cuadro de diálogo selector de color?
- 4. Tipo de entrada WPF/cuadro de diálogo?
- 5. ¿WPF tiene un cuadro de diálogo de archivo nativo?
- 6. Cómo personalizar el color del color de CheckMark en Android en un cuadro de diálogo. : android
- 7. WPF cuadro de diálogo personalizado de gestión de errores?
- 8. Abrir el cuadro de diálogo en WPF MVVM
- 9. Aplicar un estilo a todos los cuadros de diálogo (cuadro de diálogo spinner, cuadro de diálogo de alerta, etc.)
- 10. Devolver valores personalizados del cuadro de diálogo WPF
- 11. ¿Crear un cuadro de diálogo de entrada?
- 12. Cómo crear un cuadro de diálogo modal genérico/reutilizable para WPF después de MVVM
- 13. ¿Cómo hago un cuadro de diálogo modal para una página en mi aplicación WPF?
- 14. ¿Establecer el color de fondo para la barra de título del cuadro de diálogo?
- 15. cuadro de diálogo jQuery
- 16. JQGrid dentro de un cuadro de diálogo
- 17. WPF: ¿Cómo configuro la ventana de propietario de un cuadro de diálogo que muestra un UserControl?
- 18. El cuadro de diálogo no modal de WPF representa el cuadro de texto no editable
- 19. Abrir nuevo cuadro de diálogo desde un cuadro de diálogo en qt
- 20. Crear un cuadro de diálogo JQuery Mobile
- 21. Elemento HTML5 semánticamente exacto para un cuadro de diálogo modal
- 22. WPF SystemColors: color del borde del cuadro de texto
- 23. ¿Desea descartar un cuadro de diálogo personalizado?
- 24. Etiquetado GTK en un cuadro de diálogo
- 25. Animar un cuadro de diálogo personalizado
- 26. forma correcta para implementar un cuadro de diálogo emergente personalizado
- 27. ¿Cómo uso un cuadro de diálogo jQueryUI para confirmación?
- 28. ¿Hay un REPL de color para Clojure?
- 29. Android muestra otro cuadro de diálogo desde un cuadro de diálogo
- 30. Tkinter askquestion cuadro de diálogo
realmente ... WPF ... y sin selector de color ... qué ... – serhio
Compruebe el [WPF extendido a olkit] (http://wpftoolkit.codeplex.com/), es una colección de controles de WPF. – jwillmer
Hay un [ColorPicker Control] (http://wpftoolkit.codeplex.com/wikipage?title=ColorPicker) en [Extended WPF Toolkit] (http://wpftoolkit.codeplex.com/) que podría colocarse en un diálogo. – SpeedCoder5