从托管WinForm应用程序访问WPF控件

时间:2013-04-16 15:19:32

标签: wpf winforms wpf-controls

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

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

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

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

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

  

您可以发布工具栏的XAML吗? - HighCore

我问你工具栏的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应用程序的主要形式访问每个工具栏的控件,并做我想要的。 (添加事件,在运行时禁用/启用控件,在初始化或运行时将项添加到组合,...)。 但根据我对 Kent Boogaart 的理解,这不是正确的做法。

1 个答案:

答案 0 :(得分:1)

我很快就会将WPF UI绑定到模型上。然后,我将从Winforms端访问该模型并操纵它。

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

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