这是我的代码:
public void Repaint() {
canvas1.Children.Clear();
ObservableCollection<ClassBox> classes = viewModel.Classes;
foreach (ClassBox j in classes) {
// connect our ui element to the mouse handler if not done already
if (!j.MouseActive) {
j.Box.PreviewMouseLeftButtonUp += Handle_MouseUp;
j.Box.PreviewMouseLeftButtonDown += Handle_MouseDown;
j.Box.PreviewMouseMove += Handle_MouseMove;
j.MouseActive = true;
// Heres should the code be written (something like :)
// j.Box.SetColor(Change_Color(value));
}
canvas1.Children.Add(j.Box);
} }
所以上面的代码展示了当我调用这个方法时这些盒子是如何被重绘的。工作正常,但现在代码的下一部分:
private void Change_ColourBox(object sender, System.Windows.RoutedEventArgs e)
{
var element = sender as FrameworkElement;
ObservableCollection<ClassBox> classes = viewModel.Classes;
foreach (ClassBox j in classes)
{
// connect our ui element to the mouse handler if not done already
if (sender == BoxStandard)
{
j.Box.Background = new SolidColorBrush(Colors.White);
j.Box.Foreground = new SolidColorBrush(Colors.Black);
Repaint();
} }
这段代码告诉我们应该在"Change_Color"
按下按钮时改变颜色。我已经在 XAML 中实现了这些按钮,并给它们起了名字,在这种情况下"BoxStandard"
。
下一个代码片段是我通过事件处理程序生成框的地方。
private void Spawn_Box(object sender, System.Windows.RoutedEventArgs e) {
viewModel.GetURController.AddAndExecute(new AddClassCommand(viewModel));
}
我要排好队:我为我的元素提供预定义的颜色,它们从它们开始。当我通过单击事件“Change_Color”更改颜色时,它们会更改为所需的颜色。但是,当我在画布上生成一个新元素时,它的颜色是预定义的。我想用改变的颜色生成它。
问你是否不明白我可以更深入地解释的问题!
- ClassBox 是一个由盒子的属性组成的对象。重绘不仅适用于前景色/背景色,还计算盒子位置的差异