在使用datatemplates时,我有一个使用x:type的WPF应用程序。 这在开箱即用的Silverlight中不起作用,但我记得我之前在googlegroup中看到的东西,他们在那里谈论Silverlight Extensions以及如何使用它。
如果有人知道我在说什么,或者知道如何在silverlight中重用我的datatemplate并且有一些不错的样本代码,那么你就可以度过我的一天。
/约翰
答案 0 :(得分:1)
我几天前遇到同样的问题......我找到了一个解决方案......我并不为此感到骄傲,但它确实有效...... 创建一个datatemplate并添加所有可能的用户控件
<DataTemplate x:Key="WorkspaceItemTemplate">
<Grid>
<View:TreeView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=TreeView}" />
<View:GridView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=GridView}" />
<View:DataView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=DataView}" />
</Grid>
</DataTemplate>
并创建一个转换器,根据类型
更改可见性 public class ViewVisibilityConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (((ViewModelBase)value).DisplayName.Equals((string)parameter))
return Visibility.Visible;
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
答案 1 :(得分:1)
最终在Silverlight 5中修复了这一点。你现在可以编写这类东西了:
<DataTemplate DataType="loc:MyType">
<TextBlock Text="My template" />
</DataTemplate>
您可以将其放在资源字典中,而无需指定x:Key。
请注意,Silverlight不支持x:Type属性,因此您需要指定类型名称,而不是标记扩展名,正如Muad'Dib所提到的那样(尽管他的建议在撰写时并没有真正起作用)早在2009年 - Silverlight的DataTemplate在2011年12月之前甚至没有DataType属性。)
答案 2 :(得分:0)
<Style TargetType="local:TemplatedControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:TemplatedControl">
<StackPanel x:Name="Panel" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>