मैं डिफ़ॉल्ट DataTemplate की जगह के बारे में यकीन नहीं है, लेकिन आप प्रदर्शन ToString पारित करने के लिए एक ValueConverter उपयोग कर सकते हैं कुछ प्रकार के मामले में और एक खाली स्ट्रिंग अन्यथा। यहाँ कुछ कोड है (ध्यान दें कि typeb TextBlock नहीं करता है क्या यह सामान्य रूप से की तरह दिखता है दिखाने के लिए उस पर कनवर्टर है):
.xaml:
<Window x:Class="EmptyTemplate.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loc="clr-namespace:EmptyTemplate"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<loc:AType x:Key="atype"/>
<loc:BType x:Key="btype"/>
<loc:TypeConverter x:Key="TypeConverter"/>
</Window.Resources>
<StackPanel>
<Button Content="{Binding Source={StaticResource atype}, Converter={StaticResource TypeConverter}}"/>
<Button Content="{Binding Source={StaticResource btype}, Converter={StaticResource TypeConverter}}"/>
<TextBlock Text="{Binding Source={StaticResource atype}, Converter={StaticResource TypeConverter}}"/>
<TextBlock Text="{Binding Source={StaticResource btype}}"/>
</StackPanel>
</Window>
.xaml.cs:
namespace EmptyTemplate
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
public class AType { }
public class BType { }
public class TypeConverter : IValueConverter
{
public DataTemplate DefaultTemplate { get; set; }
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value.GetType() == typeof(AType))
{
return value.ToString();
}
return DefaultTemplate;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
}
स्रोत
2009-04-03 23:56:59
"WPF सटीक क्रम प्रकार से अपने DataTemplate के साथ एक वस्तु से मेल खाता है"। यदि आप DataType = BaseClass के साथ डेटा टेम्पलेट जोड़ते हैं, तो यह सब क्लास से भी मेल खाएगा। मैंने इसे देखा है। दुर्भाग्यवश, ढांचा विशेष रूप से सिस्टम के लिए डेटा टेम्पलेट बनाने की अनुमति नहीं देता है। ऑब्जेक्ट; आपको रनटाइम त्रुटि मिलती है "प्रकार 'DataTemplateKey' असफल निर्माण। DataTemplate.DataType ऑब्जेक्ट टाइप नहीं किया जा सकता है।" –
आप सही हैं। मैं शैलियों के बारे में सोच रहा था, जो स्वचालित रूप से विरासत में नहीं हैं। मेरा जवाब अपडेट कर रहा है। धन्यवाद। –