Tôi đang tìm kiếm một hộp thoại màu cho WPF? Có thiết bị tích hợp sẵn không? Tôi có nên tự xây dựng không? Hoặc làm Win 32 interop? Nếu có, làm thế nào?Có hộp thoại màu cho WPF không?
13
A
Trả lời
3
Heres một bảng chọn màu sắc đơn giản sử dụng tài sản gắn liền, nên bất cứ ai được tìm kiếm mã ví dụ
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());
}
}
và ở đây nó đang được sử dụng
<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
Tôi đã viết một WPF màu đơn giản công cụ chọn hỗ trợ các tính năng sau đây trong khi quay lại
- 3 loại khác nhau của màu swatch
- Thanh trượt Opacity
- Điều khiển chuột mover để lựa chọn màu
- Sets màu hiện hành về mở
- nút thoại Chuẩn
Dưới đây là bài viết trong trường hợp bạn cần nó: http://www.codeproject.com/Articles/33001/WPF-A-Simple-Color-Picker-With-Preview
+0
Điều đó trông rất đẹp. Tôi sẽ sử dụng nó nếu tôi chỉ có thể hiển thị bánh xe màu và không phải tất cả các điều khiển khác. – Steven
Các vấn đề liên quan
- 1. Màu nền mặc định tốt cho hộp thoại WPF là gì?
- 2. hộp thoại jqueryui cho màn hình màu xám ra
- 3. Lựa chọn Hộp danh sách WPF Màu
- 4. Mở hộp thoại trong WPF MVVM
- 5. Qt, Hộp thoại Bộ chọn Màu?
- 6. Hộp thoại nổi không theo phương thức trong WPF
- 7. Cách tạo Hộp thoại để nhắc người dùng có tùy chọn Có/Không trong WPF
- 8. Hộp thoại Android có giao diện hộp thoại bên trong
- 9. Hộp thoại FB.ui yêu cầu redirect_uri, hộp thoại không đóng
- 10. WPF: Lưu lượng in Tài liệu không có hộp thoại in
- 11. Áp dụng kiểu cho tất cả các hộp thoại (hộp thoại spinner, alertdialog, v.v.)
- 12. Hộp thoại giao diện người dùng jQuery - cách làm cho hộp thoại không đóng được?
- 13. Hộp thoại xử lý lỗi tùy chỉnh WPF?
- 14. Hộp thoại bộ chọn tệp trong WPF ở đâu?
- 15. Làm cách nào để in trực tiếp, không có Hộp thoại In trong WPF?
- 16. WPF hiển thị hộp thoại trước cửa sổ chính
- 17. wpf- Application_Startup - cửa sổ tải hộp thoại THEN mainwindow
- 18. Hộp thoại Winform với cửa sổ WPF làm cha mẹ
- 19. Trả về giá trị tùy chỉnh từ hộp thoại WPF
- 20. Cách chọn nút mặc định trong hộp thoại wpf?
- 21. Cách nhận màu nền của hộp thoại/cửa sổ?
- 22. PHP: Hiển thị hộp thoại có/không có xác nhận
- 23. Cách bật kiểu trực quan trong WPF cho các hộp thoại chung?
- 24. Đặt contentDescription cho hộp thoại tùy chỉnh
- 25. Xây dựng đúng cho Hộp thoại Primefaces
- 26. Android: hộp thoại không có bóng xung quanh nó
- 27. VS2010: Hộp kiểm có nền màu xám trên Tab trắng trong hộp thoại. Làm thế nào để sửa chữa nó?
- 28. Làm thế nào để xây dựng một hộp thoại modal chung/có thể sử dụng lại cho WPF theo MVVM
- 29. Mở hộp thoại mới từ hộp thoại trong qt
- 30. GooglePlayServicesUtil nút hộp thoại báo lỗi không có gì
thực sự ... WPF ... và không có bộ chọn màu nào ... – serhio
Kiểm tra [Mở rộng WPF thành olkit] (http://wpftoolkit.codeplex.com/), đó là một bộ sưu tập các điều khiển WPF. – jwillmer
Có [Kiểm soát ColorPicker] (http://wpftoolkit.codeplex.com/wikipage?title=ColorPicker) trong [Bộ công cụ mở rộng WPF] (http://wpftoolkit.codeplex.com/) có thể được đặt trên hộp thoại. – SpeedCoder5