【问题标题】:WPF: Locate Parent Window from ListView ViewBaseWPF:从 ListView ViewBase 定位父窗口
【发布时间】:2010-09-14 07:17:17
【问题描述】:

我有一个 ListView,它允许用户通过上下文菜单更改 ViewBase(它的作用类似于 Windows 资源管理器的简化版本)。

 <ListView Name="lv" Grid.Row ="0" Grid.Column ="1"  >
        <ListView.ContextMenu>
            <ContextMenu>
                <MenuItem Header="View1" Click="SwitchViewMenu"/>
                <MenuItem Header="View2" Click="SwitchViewMenu"/>                   
            </ContextMenu>
        </ListView.ContextMenu>
        <ListView.View>
            <local:View1 />
        </ListView.View>
    </ListView>

ViewBases 数据模板在 Generic.XAML 文件中定义,我使用以下函数来更改所选视图:

 void ChangeView(string str)
    {
        if (str == "View1")
        {
            lv.View = lv.FindResource("View1") as ViewBase;
        }
        else if (str == "View2")
        {
            lv.View = lv.FindResource("View2") as ViewBase;
        }
    }

问题:

我在所有 DataTemplates 中都有一个自定义 CheckBox 控件,它附加了一个预定义的单击事件,但是当我尝试向上移动 CheckBox 的父级时,我可以达到的最高级别是数据模板正在使用中

我需要访问的是父窗口本身。

注意: 我尝试将依赖属性添加到自定义复选框控件,并将其绑定到已发送对象(数据模板的项目 DataType 对象)中的额外定义变量,该变量具有窗口引用作为其值,但即使所有绑定了其他依赖属性/值。

【问题讨论】:

    标签: c# wpf binding generic.xaml


    【解决方案1】:

    这取决于您尝试与父母联系的方式。我强烈推荐 this 文章 (Josh Smith) 以真正了解 WPF 中发生的事情。

    也就是说,你可以试试Window.GetWindow(myControl);(静态方法);它应该适用于任何纯 WPF 树(对于与 WinForms 的互操作,请参阅 this)。

    【讨论】:

    • 哈哈!实际上,我最终找到了一种解决方法,可以解决问题..但是您的解决方案以更简单的方式和更少的代码完美地工作。 (+1)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多