1

我有一个 WinForm 应用程序,我试图用 WPF 工具栏替换我的工具栏。我的解决方案现在包含两个项目:

  • 定义 WPF 工具栏的 WPF 用户控件项目
  • 承载 WPF 工具栏的 Windows 窗体应用程序

启用/禁用按钮、将项目添加到组合、工具栏控件的事件处理必须在 WinForm 应用程序中定义,因此为了访问它们,我执行了以下操作:

  • 在 XAML 中,我为工具栏中的每个控件命名
  • 在代码中,我为每个控件定义了一个公共 get 属性

这很好用,但我想知道这是否是正确的方法。有没有更好的方法来做我想做的事?

您可以发布工具栏的 XAML 吗?– 高核

我已经按照您的要求制作了我的工具栏的 XAML 的一个小示例。

  <ToolBarTray>
        <ToolBar Band="1" BandIndex="1">
            <Button Name="btnDoSomething1">
                <Image Source="/WpfExampToolbarCtrl;component/Images/DoSomething1.png" />
            </Button>
            <Button Name="btnDoSomething2">
                <Image Source="/WpfExampToolbarCtrl;component/Images/DoSomething2.png" />
            </Button>
            <Separator />
            <Menu>
                <MenuItem Header="Create Item">
                    <MenuItem Header="Item 1" />
                    <MenuItem Header="Item 2" />
                </MenuItem>
            </Menu>
            <Separator />
            <ComboBox Name="comboCategory">
                <ComboBoxItem Content="Category 1" IsSelected="True" />
                <ComboBoxItem Content="Category 2" />
            </ComboBox>
        </ToolBar>
    </ToolBarTray>

我想给工具栏中的每个控件一个名称,并在后面的代码中为每个控件定义一个 get 属性。这样我就可以从我的 WinForm 应用程序的主窗体访问工具栏的每个控件,然后做我想做的事。(添加事件,在运行时禁用/启用控件,在初始化或运行时将项目添加到组合中,......)。但据我从肯特·布加特的回答中了解到,这不是正确的方法。

4

1 回答 1

1

我宁愿将我的 WPF UI 绑定到模型。然后,我将从 Winforms 端访问模型并对其进行操作。

详细说明:WPF 的绑定基础结构非常强大,与您在 Winforms 中习惯的不同。WPF 应用程序倾向于遵循MVVM 模式,其中视图的数据上下文是视图模型,并且视图中的控件具有与视图模型中的属性的绑定。

因此,我建议您首先定义一个视图模型,然后修改您的 WPF 视图以绑定到该视图模型上的属性,然后从您的 Winforms 代码访问该视图模型。从 Winforms 代码更改该视图模型的属性将自动更新 WPF 视图。

于 2013-04-16T15:41:18.357 回答