Новый расширенный WPFToolkit ColorPicker - PullRequest
6 голосов
/ 12 ноября 2010

Я пытался получить новый инструмент выбора цвета из набора инструментов, работающий в моем приложении, но безуспешно ...

Вот пример кода, который должен подобрать цвет фона окна для заполнения.текущий цвет и после нового выделения должен изменить цвет фона на выбранный цвет ...

<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/

Ответы [ 5 ]

9 голосов
/ 12 ноября 2010

Проблема здесь в том, что Window.Background - это Brush, а SelectedColor и CurrentColor - это Color. Вы можете заставить это работать, используя Конвертер.

<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);
        }
    }
}
5 голосов
/ 07 октября 2012

Функция конвертации не работает для меня, в конце концов, это сработало:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    return new SolidColorBrush((Color)value);
}
3 голосов
/ 16 ноября 2010

Спасибо, Мелеак. На этот вопрос также ответили в обсуждениях .

Также недавно был обновлен ColorPicker. Проверьте это.

0 голосов
/ 13 августа 2013

Используйте настройки в качестве посредника. В вашем 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>
0 голосов
/ 12 ноября 2010

Это выглядит правильно на первый взгляд. Попробуйте запустить приложение в режиме отладки и посмотрите окно вывода в Visual Studio на наличие ошибок привязки.

...