我已经创建了一个DataTemplate,如下所示
<DataTemplate x:Key="ScheduleItemPendingTemplate">
<Grid IsHitTestVisible="False" Background="{StaticResource StatusPendingBrush}">
<Rectangle Stroke="{StaticResource AppointmentSectionBgActive}"
StrokeDashArray="2 1"
StrokeThickness="1.5"
Fill="{StaticResource DataGridHeaderBackground}" />
<TextBlock x:Name="txtAppointmentTitleinDefault"
Text="{x:Static resource:StringResources.Label_AppointmentStatus_Pending}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Style="{StaticResource AppointmentDataLabel}" />
</Grid>
</DataTemplate>
我已使用下面的代码将此模板分配给DataTemplate变量。
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
dataTemplate = AppointmentTemplateResourceDictionary["DefaultTemplate"] as DataTemplate;
if (//some condition)
{
DataTemplate pendingTemplate = AppointmentTemplateResourceDictionary["ScheduleItemPendingTemplate"] as DataTemplate;
}
return pendingTemplate;
}
我如何知道我返回的DataTemplate的名称?
答案 0 :(得分:1)
如果你已经意识到这一点,我不确定你为什么要在代码中获得x:Key
。 x:Key
将为ScheduleItemPendingTemplate
。
关于DataTemplateKey
,它用于标识DataTemplate DataType
和will be null in case you haven't defined any DataType for your template
。
<DataTemplate x:Key="ScheduleItemPendingTemplate"
DataType="StackPanel">
....
</DataTemplate>
在上面的情况下,DataTemplateKey
不会为空,并会告诉您它的DataType是StackPanel。
此外,无法从代码中获取x:Key
。获取的唯一方法是遍历资源键 -
foreach (var resourceKey in this.Resources.Keys)
{
}
如上所述,没有任何内置可以从DataTemplate中获取x:Key
。但是您可以在运行时添加资源,并可以访问要获取此名称的Resources
。 (仅限解决方法)
dataTemplate = AppointmentTemplateResourceDictionary["DefaultTemplate"]
as DataTemplate;
dataTemplate.Resources["Key"] = "DefaultTemplate";
if (//some condition)
{
DataTemplate pendingTemplate =
AppointmentTemplateResourceDictionary["ScheduleItemPendingTemplate"]
as DataTemplate;
pendingTemplate.Resources["Key"] = "ScheduleItemPendingTemplate";
}
你可以在任何你想要的地方访问它 -
string key = dataTemplate.Resources["Key"];
答案 1 :(得分:0)
尝试使用此方法:http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findresource(v=vs.110).aspx
你内部的代码控制
var = this.FindResource("ResourceKey")