我无法为TreeViewItems定义触发器。我相信这只是一些语法问题,但我不知道还有什么要写的......
这是触发器:
<DataTrigger Binding="{Binding Path=., Converter=IsNodeConverter}" Value="True">
<Setter Property="Focusable" Value="False"/>
</DataTrigger>
由于它是在TreeView.ItemContainerStyle
内定义的,DataContext
应该是包含的项目本身。该项可以是Node
或Entry
类型,我想触发所有类型为Node
的项目。所以我写了一个转换器:
public class IsNodeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Node)
return true;
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
如果输入true
,则返回Node
,否则返回false
。
但是在Binding="{Binding Path=., Converter=IsNodeConverter}"
部分,编译器抱怨:“IValueConverter无法从字符串转换。” (原文:“Vom TypeConverter-ObjektfürIValueConverterwird das Konvertieren aus einer Zeichenfolgenichtunterstützt。”)我根本不明白这一点:DataContext是Entry
或Node
类型的对象,{ {1}}应该保持这种方式。 那么问题是什么?编译器在说什么字符串?如何更正此问题以便编译器不会抱怨?
以下是TreeView的完整代码供参考。集合'AllNodesAndEntries'是Binding Path=.
,其中包含ObservableCollection<object>
和Node
s。
Entry
答案 0 :(得分:3)
您的转换器肯定在ResourceDictionary中声明,因此它应该被引用为StaticResource:
Binding="{Binding Path=., Converter={StaticResource IsNodeConverter}}"
或更短:
Binding="{Binding Converter={StaticResource IsNodeConverter}}"
答案 1 :(得分:0)
根据帖子Using Value Converters in WPF without having to define them as resources first中的回答:
<DataTrigger Value="False">
<DataTrigger.Binding>
<Binding> <!-- <Binding Path="."> is possible but not necessary -->
<Binding.Converter>
<converterNamespace:IsNodeConverter/>
</Binding.Converter>
</Binding>
</DataTrigger.Binding>
<Setter Property="Focusable" Value="False"/>
</DataTrigger>