【问题标题】:WPF InkCanvas - can't change colorWPF InkCanvas - 无法更改颜色
【发布时间】:2016-01-07 14:21:07
【问题描述】:

绝对荒谬! 我正在尝试通过 code 更改 inkCanvas 的颜色,但它不起作用。我看过很多关于这方面的教程,但它们对我不起作用。尽管它们很简单。我是 WPF 的新手,但仍然 - 这应该是显而易见的。

*注意:我可以通过 XAML 设置颜色,但这是一次性操作,不是我想要的。

我的代码:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Media;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        InkCanvas inkCanvas = new InkCanvas();

        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(SetColor);
        }

        // doesn't work
        private void SetColor(object sender, RoutedEventArgs e)
        {
            inkCanvas.DefaultDrawingAttributes.Color = Colors.Red;
        }
         // doesn't work either
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            inkAttributes.Color = Colors.Blue;
        }
    }
}

编辑:我的 XAML 是:

<Window...
< InkCanvas Name="inkCanvas" /> ....

【问题讨论】:

  • 您是否尝试将颜色绑定到 XAML 中的属性?
  • 没有。我现在正在阅读它。

标签: c# wpf inkcanvas


【解决方案1】:

在您的代码示例中,您在窗口的代码隐藏中定义 inkCanvas,但不要将其添加到窗口的可视控件中。

如果您使用 XAML 指定画布:

<Window x:Class="..."
        ...>
    <InkCanvas x:Name="inkCanvas"/>
</Window>

或者在C#中定义并添加到窗口中:

InkCanvas inkCanvas = new InkCanvas();

public MainWindow()
{
    InitializeComponent();
    this.Loaded += (sender, args) =>
    {
        this.AddChild(inkCanvas);
    };
}

那么inkCanvas.DefaultDrawingAttributes.Color = Colors.Red; 这条线就可以工作了。

【讨论】:

  • 就是这样!在 XAML 中,我使用了“Name”属性而不是“x:Name”。我什至没有想过在那里寻找问题。后者似乎与代码隐藏建立了联系。非常感谢!
  • 实际上,问题是我已经在代码隐藏中定义了InkCanvas inkCanvas = new InkCanvas();,即使我已经有一个具有这样名称的元素。删除该行修复了这种歧义(编译器不会将其标记为有问题)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2018-04-12
  • 2020-10-07
  • 1970-01-01
  • 2023-04-11
相关资源
最近更新 更多