Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定转换器不适用于根TreeViewItem元素(WPF)_C#_Wpf_Xaml_Treeview - Fatal编程技术网

C# 绑定转换器不适用于根TreeViewItem元素(WPF)

C# 绑定转换器不适用于根TreeViewItem元素(WPF),c#,wpf,xaml,treeview,C#,Wpf,Xaml,Treeview,我正在使用WPF提供的TreeView控件创建一个文件浏览器应用程序。我对其进行了自定义,使其在路径旁边显示一个文件图标。我正在使用IValueConverter将路径转换为所需的图像,我基于此页面: 它主要起作用!除了根树视图项由于某些原因不显示图标之外。我在IValueConverter::Convert函数上放置了一个断点,并确认它不会对根节点执行,而是对之后的所有子节点执行 VS output窗口没有显示绑定错误,因此我不知道这是如何发生的。有什么想法吗 转换器代码: [ValueCon

我正在使用WPF提供的TreeView控件创建一个文件浏览器应用程序。我对其进行了自定义,使其在路径旁边显示一个文件图标。我正在使用IValueConverter将路径转换为所需的图像,我基于此页面:

它主要起作用!除了根树视图项由于某些原因不显示图标之外。我在IValueConverter::Convert函数上放置了一个断点,并确认它不会对根节点执行,而是对之后的所有子节点执行

VS output窗口没有显示绑定错误,因此我不知道这是如何发生的。有什么想法吗

转换器代码:

[ValueConversion(typeof(string), typeof(bool))]
public class HeaderToImageConverter : IValueConverter
{
    public static HeaderToImageConverter Instance = new HeaderToImageConverter();

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if ((value as string).Contains(@"\"))
        {
            Uri uri = new Uri("pack://application:,,,/Images/diskdrive.png");
            BitmapImage source = new BitmapImage(uri);
            return source;
        }
        else
        {
            Uri uri = new Uri("pack://application:,,,/Images/folder.png");
            BitmapImage source = new BitmapImage(uri);
            return source;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException("Cannot convert back");
    }
}
TreeView XAML:

<TreeView Grid.Column="0" Name="fileExplorer" Margin="8,8,8,8">
    <TreeView.Resources>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Width="20" Height="20" Stretch="Fill" Source="{Binding Converter={x:Static local:HeaderToImageConverter.Instance}}" />
                            <TextBlock Text="{Binding}" Margin="5,0" VerticalAlignment="Center"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeView.Resources>

我遇到了类似的问题。但是除了TreeView.Resources之外,我还有TreeView.ItemContainerStyle元素。将Style元素移动到那里实际上只设置了根元素的样式,而没有设置子元素的样式。因此,解决方案是将元素放在两个位置

TreeView XAML:

<TreeView Grid.Column="0" Name="fileExplorer" Margin="8,8,8,8">
    <TreeView.Resources>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Width="20" Height="20" Stretch="Fill" Source="{Binding Converter={x:Static local:HeaderToImageConverter.Instance}}" />
                            <TextBlock Text="{Binding}" Margin="5,0" VerticalAlignment="Center"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeView.Resources>
现在,最好不要再使用这个HeaderTemplate设置器。但我还没有找到一种方法来做到这一点