WPF 仪表板和小部件

发布于 2024-12-01 14:11:58 字数 184 浏览 0 评论 0原文

你好,我想写一些仪表板。您应该能够从某个来源拖动仪表板上的小部件。小部件的布局应该是自由的(首先是画布,后来是一些自己的面板)。

我的问题:

  • 对于有关此类控件的信息,您有什么提示吗?
  • 使用 Selector 作为 BaseClass 是一个好主意还是应该从 Control 继承

Hi I would like to write some kind of dashboard. You should be able to drag widgets on the dashboard from some source. The layout of the widgets should be free (first Canvas, later some own Panel).

My questions:

  • Do you have any hints for information about this kind of controls for me?
  • Is it a good idea to use Selector as BaseClass or should inherit from Control

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

可爱暴击 2024-12-08 14:11:58

我将为所有小部件创建一个 BaseClass ,然后为每个小部件构建一个继承该 BaseClassViewModel 以及一个 View 与该 ViewModel 一起使用

之后,我会得到类似 ObservableCollection的东西。在主应用程序 ViewModel 中打开 Widgets,并将其绑定到 ItemsControl

ItemsControl 会将其 ItemsPanelTemplate 设置为 Canvas,并且每个 WidgetBaseViewModel 将包含一个 Top< /code>、LeftHeightWidth 属性。

显示每个小部件的实际 UI 将基于 DataTemplate,并且可以是您想要的任何内容,尽管 UserControl 是最简单的

<ItemsControl ItemsSource="{Binding OpenWidgets}">
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type local:WidgetAViewModel}">
            <local:WidgetAView />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:WidgetBViewModel}">
            <local:WidgetBView />
        </DataTemplate>
    </ItemsControl.Resources>

    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Canvas ... />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

此外,您还需要绑定您的 Canvas.Top/Canvas.Left 位于 ItemContainerStyle 上,而不是实际的 ItemTemplate 上以使其显示正确地在画布上。

I would make a BaseClass for all widgets, and then build a ViewModel that inherits from that BaseClass for each Widget, along with a View to go with that ViewModel

After that, I would have something like ObservableCollection<WidgetBaseViewModel> OpenWidgets in the main application ViewModel, and bind it to an ItemsControl.

The ItemsControl would have it's ItemsPanelTemplate set to a Canvas, and each WidgetBaseViewModel would contain a Top, Left, Height, and Width property.

The actual UI to display each Widget with would be based on a DataTemplate, and could be anything you want, although a UserControl would be easiest

<ItemsControl ItemsSource="{Binding OpenWidgets}">
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type local:WidgetAViewModel}">
            <local:WidgetAView />
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:WidgetBViewModel}">
            <local:WidgetBView />
        </DataTemplate>
    </ItemsControl.Resources>

    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Canvas ... />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Also, you'll need to bind your Canvas.Top/Canvas.Left on the ItemContainerStyle instead of on the actual ItemTemplate to get it to display correctly in the canvas.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文