标签: design-time

将自定义设计时命令添加到WinForms控件

我有一个自定义的WinForms控件(继承自控件,即没有用户界面jsut作为Timer),我想添加一个自定义命令添加设计时间.

这可能类似于"右键单击并选择菜单中的'编辑项目...'".

这是可能的吗?怎么样?

另外,您能否推荐一些有关改善自定义控件设计时间体验的一般性阅读(在线)?

c# design-time custom-controls winforms

5
推荐指数
1
解决办法
2621
查看次数

在自定义/用户控件(Winforms)中为嵌套容器添加设计时支持

我有类似于向导控件的东西,中间是我想用来放置任何子控件的Panel.

我发现使用ScrollableControlDesigner将允许将删除的控件添加到custom/usercontrol,但这不是我需要的.它需要添加到容器中,因此可以应用布局而不会影响"外部"控件(标题,导航按钮).

我尝试了各种各样的方法,但没有用,看起来很笨拙.

有任何想法吗?

.net design-time winforms

5
推荐指数
1
解决办法
1967
查看次数

设计时编辑器对控件集合的支持

我想向组件添加一个表示控件集合的属性,并具有一个集合编辑器,通过它我可以轻松地选择属于该集合的控件。VS确实几乎什么,我用下面的代码自动希望:

    Private _controls As New List(Of Control)
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
    Public ReadOnly Property SelectedControls() As List(Of Control)
        Get
            Return _controls
        End Get
    End Property
Run Code Online (Sandbox Code Playgroud)

我得到默认的CollectionEditor,可以添加和删除控件,并且集合被序列化。

问题是我不想添加控件,我想从表单上的其他可用控件中选择多个控件。有什么简单/标准的方法可以做到这一点,还是我必须编写自己的集合编辑器并运行控件集合?

尽管关于集合编辑器(UITypeEditors)和其他设计时主题的材料很多,但我找不到能够证明这种确切行为的任何链接,因此可以提供任何帮助。

.net user-controls design-time uitypeeditor collectioneditor

5
推荐指数
1
解决办法
1627
查看次数

设计时拖放

我目前正在开发一个项目,我的部分是设计一个Design Surface,最终用户可以在运行时添加/删除/移动控件.

我按照本教程"由Tim Dawson主持Windows窗体设计器",几乎已经实现了我需要的所有功能.

短篇小说对于那些谁不想读教程:我实现了IDesignerHost,IContainer,ISelectionService,IToolboxService和其他一些界面,创建我的设计图面.我没有使用System.ComponentModel.Design.DesignSurface已经在框架中,主要是因为我需要一个真正的自定义设计表面.

题 :

我想允许用户拖放新ControlIToolboxServiceIDesignerHost/IContainer.在本教程中,您可以Control在工具箱中单击,在设计图面上单击以添加控件.

我发现了什么:

  • 有一个内置的功能可以自动拖放 IToolboxService, System.ComponentModel.Design.DesignSurface但如果你从零开始实现IDesignerHost,它显然无法正常工作.
  • 使用该 Control.DoDragDrop(ToolboxItem) 方法时,要启动拖放操作:

    1. IToolboxService.SerializeToolboxItem(ToolboxItem) 被调用来序列化项目
    2. IToolboxService.IsToolboxItem(object)
      IToolboxService.IsSupported(object) 调用以评估是否
      允许在设计图面上对序列化的ToolboxItem进行droped
    3. 当您放下控件时:IToolboxService.DeserializeToolboxItem(object serializedObject)由设计表面调用以反序列化控件.
  • IToolboxService.SetCursor() 被调用以了解您是否定义了自定义光标,或者让标准窗口光标.

问题:

我实现了上面提到的所有内容,在"我发现了什么"中,但拖放是错误的:

  • 我拖动,一切都很好,但当悬停在设计表面时,我的光标在标准光标和" DragDropEffects.Copy"样式之间略微闪烁.
  • 当我放下时,没有任何反应,当我的光标离开设计表面时(在我放下之后),然后Control创建新的并添加到我丢弃它的地方.

有没有人试图做我正在做的事情,如果有的话,你是如何管理它的?有没有人有任何指针/链接/好建议?

谢谢=)

c# design-time drag-and-drop

5
推荐指数
1
解决办法
3835
查看次数

如何在设计时获取项目路径

我使用一个组件(System.ComponentModel.Component),我想获取我的项目的应用程序路径,以便在其中创建一个文件.

谢谢

弗洛里安

c# components design-time path

5
推荐指数
2
解决办法
5474
查看次数

在Blend设计时使用Moq

这可能有点像,但假设我想在ViewModel中使用Moq来创建一些设计时数据,如下所示:

public class SomeViewModel
{
   public SomeViewModel(ISomeDependency dependency)
   {
      if (IsInDesignMode)
      {
         var mock = new Mock<ISomeDependency>();
         dependency = mock.Object; // this throws!  
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

模拟可以设置为做一些事情,但你明白了.

我的问题是,在Blend的设计时,这段代码抛出一个InvalidCastException,消息沿着"无法将类型为'Castle.Proxies.ISomeDependencyProxy2b3a8f3188284ff0b1129bdf3d50d3fc'的对象强制转换为'ISomeDependency'." 虽然这不一定看起来与Moq相关但与Castle相关,我希望Moq示例有帮助;)

知道为什么会这样吗?

谢谢!

silverlight wpf design-time mvvm expression-blend

5
推荐指数
1
解决办法
611
查看次数

什么代码作为XAML设计时的一部分执行?在Visual Studio和Blend中

作为一些背景知识,我正在使用Windows Store应用程序和Windows Phone 8应用程序共享一个ViewModel(PCL).

我正在使用MVVMLight和NInject/Common Service Locator来实例化视图模型和服务.这是伟大的,给我非常好的松耦合,这是很棒的测试等等.

然而,获得设计时数据支持(通过切换不同的NInject模块等)是一个完整的黑盒子,虽然我现在有它工作我对它不是很满意,它主要是通过反复试验.

我正在使用标准做法ViewModelLocator(实例化为app资源)从服务定位器中提取View Models.这总是被执行.

问题是,我无法确定设计时编辑器实际执行了多少代码.因此,为了确保初始化NInject并将CSL挂钩到NInject,我必须在其ViewModelLocator上调用一个静态构造函数App来启动NInject.

这对我来说似乎不对.实际上,我想知道最佳做法是什么,以及是否有任何文档/保证应用程序的哪些部分在设计时显示"启动",如果它们之间存在差异Windows应用商店应用和Windows Phone 8应用.

ViewModelLocator.cs(片段)

public class ViewModelLocator
{
    static ViewModelLocator()
    {
        System.Diagnostics.Debug.WriteLine("VML Start");
        var servicelocator = new NinjectServiceLocator(App.Kernel);
        ServiceLocator.SetLocatorProvider(() => servicelocator);
        System.Diagnostics.Debug.WriteLine("VML End");
    }

    public AppViewModel AppViewModel
    {
        get { return ServiceLocator.Current.GetInstance<AppViewModel>(); }
    }

    public MainViewModel MainViewModel
    {
        get { return ServiceLocator.Current.GetInstance<MainViewModel>(); }
    } 
}
Run Code Online (Sandbox Code Playgroud)

App.xaml.cs(片段)

partial class App : Application
{
    public static StandardKernel Kernel { private set; get; }

    static App() …
Run Code Online (Sandbox Code Playgroud)

xaml design-time dependency-injection windows-phone windows-store-apps

5
推荐指数
1
解决办法
1296
查看次数

WYSIWYG视图创建的WPF设计器限制和规则摘要?

对于WPF/Silverlight/XAML4Win8/WP8/whathaveyou,视觉效果是由(我相信)创建自定义视图(window/page/usercontrol/whathaveyou)派生自的基类实例,然后应用XAML创建的.事后.

如果我没有弄错,这意味着类型构造函数中的代码隐藏将丢失.有没有办法在视图本身中执行设计时对象创建逻辑?更重要的是,在网上有一个很好的总结,了解Cider/Blend设计师如何在设计时实际创建所见即所得的视图?我好像在某处回忆起一些关于这个的文档(也许是Expression Studio的文档?)但是我找不到它们的生命.

c# wpf xaml design-time

5
推荐指数
1
解决办法
361
查看次数

ICommandSource的命令在VS 2015中抛出"属性"命令"没有可访问的setter"例外

我目前正在运行Visual Studio 2015的"14.0.23103.0 D14REL",并注意到关于实现ICommandSource接口的自定义UI控件的一个奇怪的设计时异常.更有趣的是,如果目标平台x64,问题就出现了.当设置来自上述接口的实现的自定义控件的Command属性时,VS设计抛出" 属性"命令"没有可访问的setter "异常.

当平台是x64或者我错过了某些东西时,这是Visual Studio 2015的已知问题吗?这是我实现的一些代码.

  • 风景

    <Grid>
        <local:MyControl MySecondCommand="{Binding MyCommand}"
                             Command="{Binding MyCommand}"/>
    </Grid>
    
    Run Code Online (Sandbox Code Playgroud)
  • 自定义控件

    public class MyControl : Control, ICommandSource
    {
        public static readonly DependencyProperty MySecondCommandProperty =
            DependencyProperty.Register("MySecondCommand", typeof(ICommand), typeof(MyControl), new PropertyMetadata(null));
    
        public ICommand MySecondCommand
        {
            get { return (ICommand)this.GetValue(MySecondCommandProperty); }
            set { this.SetValue(MySecondCommandProperty, value); }
        }
    
        public static readonly DependencyProperty CommandProperty =
            DependencyProperty.Register("Command", typeof(ICommand), typeof(MyControl), new PropertyMetadata(null));
    
        public ICommand Command
        {
            get { return (ICommand)this.GetValue(CommandProperty); }
            set …
    Run Code Online (Sandbox Code Playgroud)

c# 64-bit xaml design-time visual-studio-2015

5
推荐指数
0
解决办法
363
查看次数

在 MAUI 中进行设计 - 设计时 BindingContext

在 WPF 中,我使用了以下的正常组合:

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d:DataContext="{d:DesignData...}"
Run Code Online (Sandbox Code Playgroud)

允许设置设计时 DataContext。这意味着我在 XAML 中获得了合理的 Intellisense。我意识到上面的代码无法编译,但你明白了。

我刚刚开始使用 MAUI(没有 Blazor),并且希望实现同样的目标 - 这样我就可以告诉 Visual Studio 我的 ContentView 将绑定到特定的对象类型,即 d:BindingContext="" 以这样的方式运行时会被忽略吗?这将使设计 ItemTemplates 变得更加容易!

data-binding xaml design-time design-time-data maui

5
推荐指数
1
解决办法
2253
查看次数