まず、私のアプリケーションでは、拡張WPFツールキットColorPickerを使用しています。カラーピッカーへのWPFバインドコマンド
私はキャンバス上で、デシリアライズされたXMLファイルに基づいていくつかの長方形を描画します(これはうまくいきます)。描画された各矩形に対して、私は、アプリケーションのユーザーが矩形の色を変更できるようにColorPickerを追加します。私はICommand
インターフェイスを実装しようとしましたが、colorpickerはカスタムコマンドをバインドするのをサポートしていないようですので、私は固執しています。
internal class BackgroundInput
{
public BackgroundInput()
{
}
public string Color { get; set; }
public string Title { get; set; }
}
一部2
<ItemsControl Name="inputs2">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Name="testgrid" Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Left" Grid.Column="0" Text="{Binding Title}" />
<xctk:ColorPicker HorizontalAlignment="Left"
Grid.Column="1"
Name="ClrPcker_Background"
SelectedColor="{Binding Color}"
<!--tryig to bind here???-->
/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
私のC#:ColorPickerの色が変更されますたび
public override void Draw(Canvas label)
{
Rectangle rect = new Rectangle();
//...... drawing method
label.Children.Add(rect);
}
internal override void AddInputs(ItemsControl inputPanel)
{
inputPanel.Items.Add(new BackgroundInput() { Title = "Backgroundcolor:", Color = BackgroundColor });
}
//both methods get called
だから、私は、接続された矩形がそれを更新したいが背景だ。ここに私の現在のコードです色。 ColorPickerはデータを送信するためにCommand="..."
とCommandParameter="..."
をサポートしていないようですので、これを行う方法についてアドバイスを受けたいと思います。ありがとう!
編集
私が今持っているものの小さな例。ユーザーがカラーピッカーの色を変更すると、色を変更しようとしています。
EDIT
は、私は一種の作業それを得たが、私はこれが正しい方法だとは思いません。
internal class BackgroundInput
{
private string _bg;
public BackgroundInput()
{
}
public Box Box { get; internal set; }
public string Color
{
get { return _bg; }
set { _bg = value; Box.BackgroundColor = _bg; Box.redraw(); }
}
public string Title { get; set; }
}
長方形コード:ここに私の更新されたコードです
public class Box : Field
{
Canvas label;
Border _border;
public override void Draw(Canvas label)
{
_border = new Border();
_label = label;
Rectangle x= new Rectangle();
label.Children.Add(x);
}
internal override void AddInputs(ItemsControl inputPanel)
{
inputPanel.Items.Add(new BackgroundInput() { Title = "Background:", Box = this, Color = BackgroundColor });
}
public void redraw()
{
_label.Children.Remove(_label);
Draw(_label);
}
}
対応するBackgroundInput.Colorに背景をバインドします。いくつかのコマンドを実行する必要はありません。あなたのコメントのために – Mat
@Mat thansk!私はWPFの初心者です(2週間前に始まった:p)これはどうやってバインドしますか? – Markinson
キャンバスをレイアウトパネルとして使用してもよろしいですか? – Mat