当更改ContentControl的内容时,我如何知道其内容何时加载?

6

我有一个ContentControl,其内容由DataTemplateSelector根据Workspace属性确定。但是当数据模板被更改时,我必须基于ContentControl的初始大小和整个窗口进行一些计算,因此我想知道何时载入。

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

ResourceDictionary:

<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>

DataTemplateSelector:

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;
        }
    }
}

正确的处理方法是回答自己的问题,然后几天后选择它作为正确答案。 - user1228
1个回答

1

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

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

当模板被切换时,将会触发“loaded”事件。希望这能帮到您。


Grid_Loaded必须在ResourceDictionary的代码后台中。但是计算是在使用ResourceDictionary的窗口中进行的。我该如何解决这个问题? - magol
请检查以下链接是否有所帮助:https://dev59.com/93VD5IYBdhLWcg3wGHeu - biju
我知道如何为ResourceDictionary添加一个代码后端。但是,我如何与父窗口进行通信? - magol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接