0

我有一个 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 DataTemplates 在 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 的父级时,我可以达到的最高级别是使用中的 DataTemplate 中的 Parenting Grid

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

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

4

1 回答 1

2

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

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

于 2010-09-14T19:16:04.327 回答