新的扩展WPFToolkit颜色拾取

新的扩展WPFToolkit颜色拾取

问题描述:

我一直在试图从工具箱中我的应用程序工作的新颜色拾取,没有成功...新的扩展WPFToolkit颜色拾取

这里是应该拿起窗口背景的颜色样本代码填充当前颜色,并在新的选择,应该是背景颜色改变为所选颜色...

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="100" Width="200" xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended" 
     Name="Window" Background="blue"> 
    <Grid> 
     <extToolkit:ColorPicker Name="colorPicker1" 
           SelectedColor="{Binding ElementName=Window,Path=Background}" 
           CurrentColor="{Binding ElementName=Window,Path=Background}" /> 
    </Grid> 
</Window> 

这是我已经能够找到的颜色拾取的文档... http://elegantcode.com/2010/08/15/extended-wpf-toolkit-new-colorpicker-control/

这里的问题是Window.Background是一个Brush和SelectedColor,而CurrentColor是Color。你可以通过使用Converter来获得这个功能。

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended" 
     xmlns:local="clr-namespace:WpfApplication1" 
     Title="MainWindow" Height="100" Width="200" 
     Name="Window" Background="blue"> 
    <Window.Resources> 
     <local:BrushColorConverter x:Key="BrushColorConverter"/> 
    </Window.Resources> 
    <Grid> 
     <extToolkit:ColorPicker Name="colorPicker1" 
           SelectedColor="{Binding ElementName=Window, 
            Path=Background, 
            Converter={StaticResource BrushColorConverter}}" 
           CurrentColor="{Binding ElementName=Window, 
            Path=Background, 
            Converter={StaticResource BrushColorConverter}}" /> 
    </Grid> 
</Window> 

和转换器

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Data; 
using System.Windows.Media; 

namespace WpfApplication1 
{ 
    public class BrushColorConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      SolidColorBrush brush = value as SolidColorBrush; 
      return brush.Color; 
     } 
     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      Color color = (Color)value; 
      return new SolidColorBrush(color); 
     } 
    } 
} 
+0

谢谢Meleak!你再次帮助我! – 2010-11-14 14:02:43

乍一看看起来很正确。尝试在调试模式下运行您的应用程序,并观察Visual Studio中的输出窗口是否存在绑定错误。

感谢Meleak。这个问题也已在discussions中得到解答。

此外ColorPicker最近已更新。 Check it out.

转换功能不工作对我来说,这最终的伎俩:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    return new SolidColorBrush((Color)value); 
} 

使用的设置作为中介。在Settings.settings中创建一个类型为string的用户作用域参数。将其命名为BackColor1 然后为控件和元素的背景创建绑定,将它们都设置为相同的设置(如下所示)。优点是用户获得持久性设置。我想确切地说,我测试了它作为网格行的背景,而不是一个窗口,但它应该工作相同。

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="100" Width="200" xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended" 
    Name="Window" 
    Background="{Binding Source={x:Static p:Settings.Default}, Path=BackColor1, Mode=TwoWay}"> 
    <Grid> 
     <extToolkit:ColorPicker 
     SelectedColor="{Binding Source={x:Static p:Settings.Default}, Path=BackColor1, Mode=TwoWay}"/> 
    </Grid> 
</Window>