【发布时间】:2017-02-18 19:31:16
【问题描述】:
首先,在我的应用程序中,我使用的是 Extended WPF Toolkit ColorPicker。
在画布上,我根据反序列化的 XML 文件绘制了几个矩形(效果很好)。对于每个绘制的矩形,我添加了一个 ColorPicker,以便应用程序的用户可以更改矩形的颜色。我尝试实现ICommand 接口,但颜色选择器似乎不支持绑定自定义命令,所以我有点卡住了,不知道该怎么做。这是我当前的代码:
<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#
internal class BackgroundInput
{
public BackgroundInput()
{
}
public string Color { get; set; }
public string Title { get; set; }
}
第二部分:
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 的颜色发生变化时,我希望连接的矩形更新它的背景颜色。 ColorPicker 似乎不支持 Command="..." 和 CommandParameter="..." 发送数据,所以我想就如何做到这一点提供建议。谢谢!
编辑
我现在拥有的一个小例子。如果用户更改颜色选择器的颜色,我会尝试更改颜色。
编辑
我有点让它工作,但我认为这不是正确的方法。这是我更新的代码:
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);
}
}
【问题讨论】:
-
将 Rectangle.Background 绑定到对应的 BackgroundInput.Color。不需要做一些命令的东西。
-
@Mat 感谢您的评论!我对 WPF 很陌生(两周前开始使用它:p)我将如何绑定它?
-
您确定要使用画布作为布局面板吗?
-
@Mat 是的。我正在制作一种“标签设计器”,其中每个子元素都根据左上角的 x 和 y 坐标定位(非常适合画布吗?)。然后将画布放置在 ViewBox 中,这样当画布调整大小时,所有元素都将保持纵横比并完美缩放(这已经有效)
-
那么这听起来是正确的选择 ;-)
标签: c# wpf data-binding