c# - 更改时如何知道 ContentControl 的内容何时加载

标签 c# wpf wpf-controls binding

我有一个 ContentControl,其内容由基于属性 Workspace 的 DataTemplateSelector 确定。但是当数据模板改变时,我必须根据 ContentControl 和整个 Window 的初始大小做一些计算,所以我想知道它什么时候被加载。

<ContentControl Content="{Binding Path=Workspace}" ContentTemplateSelector="{StaticResource workspaceTemplateSelector}" />

资源字典:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                    xmlns:vw="clr-namespace:Capgemini.Sag.KeyEm.View">

    <DataTemplate x:Key="keyboardTemplate"  >
        <vw:Keyboard/>
    </DataTemplate>

    <DataTemplate x:Key="welcomeTemplate">
        <vw:Welcome/>
    </DataTemplate>

    <vw:WorkspaceTemplateSelector            
        KeyboardTemplate="{StaticResource keyboardTemplate}"             
        WelcomeTemplate="{StaticResource welcomeTemplate}"        
        x:Key="workspaceTemplateSelector"/>
</ResourceDictionary>

数据模板选择器:

using Capgemini.Sag.KeyEm.ViewModel.Interfaces;

namespace Capgemini.Sag.KeyEm.View
{
    using System.Windows;
    using System.Windows.Controls;

    class WorkspaceTemplateSelector : DataTemplateSelector
    {
        public DataTemplate WelcomeTemplate { get; set; }
        public DataTemplate KeyboardTemplate { get; set; }

        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            if (item is IWelcomeViewModel)
                return WelcomeTemplate;
            if (item is IKeyboardViewModel)
                return KeyboardTemplate;
            return null;
        }
    }
}

最佳答案

你可以做的一件事是将你的数据模板内容包装在一个容器中并监听加载的事件

<DataTemplate x:Key="keyboardTemplate">
        <Grid Loaded="Grid_Loaded">
            <vw:Welcome/>
        </Grid>
    </DataTemplate>

loaded 事件将在切换模板时引发。希望这对您有所帮助。

关于c# - 更改时如何知道 ContentControl 的内容何时加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4398705/

相关文章:

c# - 在 C# 中对数据求和的最有效方法

c# - 如何将对象传递给 HttpClient.PostAsync 并序列化为 JSON 主体?

c# - 委托(delegate) WPF 事件

c# - 每个 Viewmodel 实例化一个 View(同一类型的多个 View)

wpf - 如何更改 WPF 菜单的图标列大小?

c# - SandcaSTLe 是否可以配置为生成 SEO 友好的页面和链接?

wpf - 为 ListView WPF 创建图标 View 模式

wpf - Visual Studio 2010 - XAML 编辑器非常慢

wpf - 当选定的功能区选项卡项目更改时更改 View

c# - 如何在 Visual Studio 2015 中获取部分类型的所有部分定义?