【问题标题】:How to modify some parts of a CustomControl at design time in Silverlight?如何在 Silverlight 的设计时修改 CustomControl 的某些部分?
【发布时间】:2011-11-03 14:58:35
【问题描述】:

出于测试目的,我在 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 中。

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

【问题讨论】:

    标签: silverlight xaml custom-controls design-time


    【解决方案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

    【讨论】:

    • 是的,我正在使用 MVVM Light 工具包。你完全理解我想要达到的目标。我会测试你的解决方案并回来寻求反馈。谢谢!
    • 嗯...事实上,这不是我想要的。我希望我在设计时添加的数据在运行时仍然存在。
    • @Rodolphe,那么您的标题具有误导性……您到底想做什么?您确定需要自定义控件而不是用户控件吗?
    • 标题确实选错了,我不确定自定义控件。我将尝试解释全局:我想要一个包含基本布局的 DLL。这个基本布局将包含一个菜单栏、一个工具栏等。然后,在另一个项目中,我想在一个页面上使用这个控件,并能够在设计时和运行时在其中添加一些其他控件。但我的问题是菜单栏和工具栏必须部分从 DLL 填充(使用一些经典项目,如“打开”、“关闭”等)从我添加我的页面自定义/用户控件(带有特定项目)。是不是更清楚了?可行吗?
    • @Rodolphe,我认为用户控件在您的情况下是更好的候选者。这里的设计时间是指您可以在 Blend 的设计界面中看到值,对吧?
    【解决方案2】:

    如果您尝试实现示例所建议的类似功能,则可以从 ListBox 继承并扩展它。我还没有尝试过,但也许你可以在 XAML 中使用 ListBoxItems,就像你展示的那样。

    【讨论】:

    • 我在这里使用了一个 ListBox 来保持我的测试简单,但我的目标是构建更复杂的东西,包括菜单栏、工具栏和一些面板。所以我猜想从控件继承是行不通的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2013-11-16
    • 2022-01-02
    • 2022-07-08
    • 2020-05-19
    相关资源
    最近更新 更多