我有一个 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/