使用x:Type转换为WPF Datatemplates到Silverlight

时间:2009-08-20 14:25:40

标签: wpf silverlight datatemplate

在使用datatemplates时,我有一个使用x:type的WPF应用程序。 这在开箱即用的Silverlight中不起作用,但我记得我之前在googlegroup中看到的东西,他们在那里谈论Silverlight Extensions以及如何使用它。

如果有人知道我在说什么,或者知道如何在silverlight中重用我的datatemplate并且有一些不错的样本代码,那么你就可以度过我的一天。

/约翰

3 个答案:

答案 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)

在银光中,你不用x:键入并放下大括号......就像这样......

<Style TargetType="local:TemplatedControl">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:TemplatedControl">
                    <StackPanel x:Name="Panel" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>