2010-11-12 2 views
6

Ich habe versucht, die neuen Colorpicker aus dem Toolkit in meiner App zum Laufen zu bringen, ohne Erfolg ...New Erweitert WPFToolkit Colorpicker

Hier ist Beispielcode, der angeblich die Farbe des Fensterhintergrundes holen aktuelle Farbe zu füllen und auf neue Auswahl, sollte die Hintergrundfarbe auf die ausgewählte Farbe ändern ...

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

die gesamte Dokumentation ist ich habe in der Lage auf dem Colorpicker zu finden ... http://elegantcode.com/2010/08/15/extended-wpf-toolkit-new-colorpicker-control/

Antwort

9

Das Problem hier ist, dass Window.Background ein Pinsel und SelectedColor und CurrentColor ist Color. Sie können dies mithilfe eines Konverters zum Laufen bringen.

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

Und der Converter

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

Danke Meleak! Du hast mir wieder einmal geholfen! –

0

Das sieht auf den ersten Blick gut aus. Versuchen Sie, Ihre App im Debug-Modus auszuführen, und beobachten Sie das Ausgabefenster in Visual Studio auf Bindungsfehler.

2

Dank Meleak. Diese Frage wurde auch in der discussions beantwortet.

Auch der ColorPicker wurde vor kurzem aktualisiert. Check it out.

4

Die Funktion Convert wurde nicht für mich arbeiten, schließlich tat dies der Trick:

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

die Einstellungen verwenden als Vermittler auf. Erstellen Sie in Ihren Settings.settings einen Benutzerbereichsparameter vom Typ string. Nennen Sie es BackColor1 Erstellen Sie dann Bindungen für das Steuerelement und für den Hintergrund des Elements, beide auf die gleiche Einstellung (wie unten). Der Vorteil ist, dass der Benutzer eine dauerhafte Einstellung erhält. Ich möchte präzisieren, dass ich es als Hintergrund einer Grid-Zeile getestet habe, nicht als Fenster, aber es sollte genauso funktionieren.

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