【问题标题】:Get reference to View when Content returns the ViewModel?当 Content 返回 ViewModel 时获取对 View 的引用?
【发布时间】:2012-01-06 17:55:20
【问题描述】:

我有一个尝试自动调整大小的自定义控件。问题是 .Content 属性在幕后自动设置为 ViewModel。我需要控件能够访问实际的 View 以查看设置的宽度和高度。

当 .Content 设置为 ViewModel 时,如何获取 View 的句柄?

【问题讨论】:

  • 你的自定义控件不是视图吗?
  • 您可能想重申这个问题。获取 View 的句柄是什么意思?
  • 例如,我有一个模态窗口对话框。在该窗口的加载事件中,我想获取它正在呈现的顶级控件/内容,我检查了窗口的 .Content 属性,但它不是我的视图或正在呈现的最顶层网格,而是,它正在返回 ViewModel。

标签: wpf mvvm view viewmodel


【解决方案1】:

WPF 控件已经根据它们所在的面板类型自动调整大小。

例如,如果您的控件位于Grid 中,它将自动调整大小以拉伸并填充可用的整个空间。如果您的控件位于 StackPanel 中,它将自动调整大小以占用它需要的任何空间,或者换句话说,它的内容占用的任何空间。

因此,如果您希望您的控件与其内容的大小相同,请不要在其上设置大小,并将您的 UserControl 放在不会拉伸其子项的面板中,例如 @ 987654324@

<StackPanel>
    <local:MyUserControl />
</StackPanel>

或者将它的 Content 包装在一个不会拉伸它的子控件的控件中。

<UserControl ....>
    <UserControl.Template>
        <ControlTemplate>
            <StackPanel>
                <ContentPresenter />
            </StackPanel>
        </ControlTemplate>
    </UserControl.Template>
</UserControl>

【讨论】:

  • 我知道控件可以自动调整大小。问题是我有一个宽度和高度设置为自动的视图。因此,当我在主应用程序的选项卡中显示通过该视图呈现的视图模型时,它会自动正确适配。然而,有时通过一个自定义查找控件抛出一个模态对话框(也设置为自动宽度和高度),我在那里呈现相同的视图,现在一个模态对话框与一切自动呈现巨大!!!!!!我正在尝试获取该视图的句柄,以便如果宽度和高度是自动的,我可以将站点更改为小于主应用程序窗口并居中。
  • @happyfirst 为什么不在对话框上设置最大高度/宽度?​​
  • 我试过了。我以为我希望设置最大宽度和高度,但仍然打开很大。
猜你喜欢
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多