如何在Silverlight设计时修改CustomControl的某些部分?

时间:2011-11-03 14:58:36

标签: silverlight xaml custom-controls design-time

出于测试目的,我在DLL中编写了一个Silverlight自定义控件,该控件仅包含一个包含ListBox的Grid,预先填充了2个项。 (仅供参考:在这个项目中,我只有2个文件:BaseLayout.cs和Generic.xaml。)

然后,在另一个项目中,我将此自定义控件放在我的MainPage.xaml:

<UserControl x:Class="Test.MainPage"
             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"
             xmlns:base="clr-namespace:Base;assembly=Base"
             mc:Ignorable="d"
             d:DesignHeight="427"
             d:DesignWidth="508">
    <base:BaseLayout x:Name="MyLayout"
                     ListBoxBg="BlanchedAlmond" />
</UserControl>

我知道如何使用TemplateBinding更改ListBox的背景颜色 我也知道如何在运行时向这个ListBox添加项目。

但是在XAML中是否可以在设计时添加项目? 有没有办法允许这样的事情:

<base:BaseLayout x:Name="MyLayout"
                 ListBoxBg="BlanchedAlmond">
    <ListBoxItem Content="Item 4" />
    <ListBoxItem Content="Item 5" />
</base:BaseLayout>

欢迎任何建议。

编辑:更确切地说,我希望能够从两个地方在我的ListBox中添加一些项目:

  • 来自Base.DLL,在Generic.xaml中,
  • 来自另一个项目,在MainPage.xaml。

我希望所有这些项目都能在运行时保留。

2 个答案:

答案 0 :(得分:1)

如果您正在使用mvvm,这意味着您的视图包含此BaseLayout视图模型,您可以创建一个设计时视图模型,在那里编写示例数据并在视图中包含这样的内容,

<Grid x:Name="LayoutRoot" d:DataContext="{d:DesignInstance design:DesignMainViewModel, IsDesignTimeCreatable=True}">
    <base:BaseLayout x:Name="MyLayout" ListBoxBg="BlanchedAlmond"/>

有关详细信息,请参阅this post

此外,您可以使用Expression Blend创建设计时数据。请参阅this post

答案 1 :(得分:0)

如果您尝试实现与示例建议类似的功能,则可以继承ListBox并对其进行扩展。我没有尝试过,但也许你可以在显示XAML时使用ListBoxItems。