Пользовательский элемент управления Silverlight 4 не отображается

#xaml #silverlight-4.0

#xaml #silverlight-4.0

Вопрос:

Я новичок в SL и, должно быть, здесь отсутствует что-то действительно фундаментальное.

Я создал очень простой пользовательский элемент управления следующим образом:-

 <UserControl x:Class="Company.UI.Common.Controls.TestControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="Yellow" Width="100" Height="20">
        <TextBlock Text="foo"></TextBlock>
    </Grid>
</UserControl>
 

Тогда, на мой взгляд, я ссылаюсь на него следующим образом:-

 xmlns:medControls="clr-namespace:Company.UI.Common.Controls;assembly=Company.UI.Common"
 

Затем включите его в пользовательский интерфейс следующим образом:-

 <medControls:TestControl Width="100" Height="20" Visibility="Visible" />
 

Однако при запуске приложения ничего не появляется, просто пустое пространство размером 100×20 пикселей, где должен быть элемент управления. Я использовал Silverlight Spy, и он показывает, что элемент управления присутствует, со всеми правильными деталями — типом, сборкой, видимостью и т. Д.
Я установил точку останова в конструкторе пользовательского элемента управления и могу подтвердить, что вызывается InitializeComponent() .

Любые предложения относительно того, что происходит, были бы весьма признательны, поскольку я рву на себе волосы из-за того, что должно быть очень просто сделать!

Заранее спасибо, Энди

Комментарии:

1. ваш пользовательский элемент управления в порядке, я думаю, что что-то не так с представлением, в котором он размещен, вам нужно показать полный код

Ответ №1:

Это оказалось известной ошибкой в VS2010, о которой сообщается здесь: http://connect.microsoft.com/VisualStudio/feedback/details/683175/visual-studio-failing-to-embed-g-resources-file-in-dll-with-certain-silverlight-project-files

В принципе, в некоторых ситуациях порядок элементов в файле .csproj может измениться, в результате чего файлы XAML не будут включены в сборку, и это то, что происходило со мной. Нет ошибок во время выполнения. Ничего. Просто пустое место, где должен был отображаться пользовательский элемент управления.

Приведенная выше ссылка сообщает вам, что вам нужно сделать, чтобы решить проблему, и включает ручное редактирование файла .csproj и перемещение определенных элементов.

Кстати, эта же ошибка также была причиной другой проблемы, с которой я столкнулся, когда код моего пользовательского элемента управления ссылался на элемент управления (например, «this.txtForename»). Ссылка на элемент управления, которая настраивается в InitializeComponent с помощью функции FindName(), всегда была нулевой.

Надеюсь, это поможет кому-то еще.

Эндрю

Ответ №2:

Посмотрите, поможет ли это:

http://msdn.microsoft.com/en-us/library/system.windows.controls.usercontrol(v=vs.95).aspx

http://10rem.net/blog/2010/02/05/creating-customized-usercontrols-deriving-from-contentcontrol-in-wpf-4

Я никогда не пытался создать пользовательский пользовательский элемент управления в xaml, я всегда делал это программно, как вы можете видеть в этих примерах, но вы можете это сделать, если используете один ContentControl или один ContentPresenter, а затем вызываете UserControl