Проблема в том, что MaskContainer
имеет прикрепленный файл XAML, который заставляет кодер WPF генерировать класс, который реализует System.Windows.Markup.IComponentConnector
. И когда элемент управления реализует этот интерфейс, он получает совершенно новое качество: он становится корнем области именования . Это означает, что внутри такого элемента управления есть отдельное пространство имен. Имена элементов управления снаружи не конфликтуют с внутренними.
В данном конкретном случае это означает, что и maskCanvas
, и button1
не видны из mainpage
по имени, а вместо этого видны из MaskContainer
.
На самом деле, я очень удивлен, что вам даже удалось как-то скомпилировать это. По моему опыту, если вы попробуете этот трюк с Visual Studio, он будет жаловаться на то, что maskCanvas
относится к " в рамках элемента MaskContainer ". Вы случайно используете компиляцию из командной строки?
Хорошо, хватит, бла-бла-бла.
В чем решение? Просто удалите файл XAML из MaskContainer
. Это избавит от автоматически сгенерированной IComponentConnector
реализации, и все будет работать так, как вы ожидаете.