我是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" />
然而,当我运行应用程序时,没有任何内容出现,只是控制应该是100x20像素的空白区域。我使用了Silverlight Spy,它显示了控件存在,包含所有正确的细节 - 类型,装配,可见性等。 我在用户控件的构造函数中放了一个断点,并且可以确认正在调用InitializeComponent()。
任何有关正在发生的事情的建议都会非常感激,因为我正在撕扯我的头发应该是一件非常简单的事情!
提前致谢 安迪
答案 0 :(得分: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”)。使用FindName()在InitializeComponent中设置的控件引用始终为null。
希望这有助于其他人。
安德鲁
答案 1 :(得分:0)
看看这是否有帮助:
http://msdn.microsoft.com/en-us/library/system.windows.controls.usercontrol%28v=vs.95%29.aspx
我从未尝试在xaml中创建自定义用户控件我总是以编程方式进行,您可以在此示例中看到,但是如果您使用一个 ContentControl 或一个,则可以将其删除ContentPresenter ,然后称你为UserControl