私はデフォルトのDataTemplateの交換についてはよく分からないんだけど、あなたが表示ToStringメソッドを渡すためにValueConverterを使用することができます特定の型の場合は空の文字列を返します。
の.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
}
}
「WPFは、正確な実行時の型によって、そのDataTemplateを持つオブジェクトに一致します」。 DataType = BaseClassのDataTemplateを追加すると、SubClassにも一致します。私はそれが動作するのを見た。残念ながら、このフレームワークではSystem.ObjectのDataTemplateを作成することは特に禁止されています。 「タイプ 'DataTemplateKey'が構築に失敗しました.DataTemplate.DataTypeは型オブジェクトにできません。 –
あなたはそうです。私は自動的に継承されないStylesを考えていました。私の答えを更新する。ありがとう。 –