Jak sprawdzić który poziom TreeView (wpf) ?

0

Witam :]

Mój problem dotyczy tego, że muszę przy instrukcji Settera określić czy mam doczynienia z korzeniem czy dzieckiem drzewa TreeView i wg tego odpowiednio ukryć lub pokazać obiekt o nazwie EKSPOZYCJA - konwerter conv powinien według założenia zwrócić Visibility.Visible lub Visibility.Hidden, mój setter z konwersją wygląda tak:

<Style TargetType="TreeViewItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TreeViewItem">

                      <ControlTemplate.Triggers>
                            <Trigger Property="TreeViewItem.HasItems" Value="false">
                                   <Setter TargetName="EXPOZYCJA" Property="Visibility" Value="{Binding RelativeSource={x:Static RelativeSource.TemplatedParent}, Converter={StaticResource conv}}" />
                            </Trigger>
                      </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

Ustawiłem RelativeSource.TemplatedParent aby sprawdzić w konwerterze z jaką kontrolką mam do czynienia i mój konweter conv prezentuje się następująco dla tego przypadku:

using System;
using System.Diagnostics;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;

namespace ListaZadan
{
    [ValueConversion(typeof(ItemsPresenter), typeof(Visibility))]
    public class spr_poziomu_treeview : IValueConverter
    {

        public object Convert(
            object value,
            Type targetType,
            object parameter,
            CultureInfo culture)
        {
            ItemsPresenter itemsPresenter = value as ItemsPresenter;
            if (itemsPresenter == null)
                return Binding.DoNothing;

            TreeViewItem item = itemsPresenter.TemplatedParent as TreeViewItem;

            if (item == null)
                return Binding.DoNothing;


            bool isRoot =
                ItemsControl.ItemsControlFromItemContainer(item) is TreeView;


            return isRoot ? Visibility.Visible: Visibility.Hidden;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException("nie mozna wykonac ConvertBack");
        }
    }
}

Za każdym razem (sprawdziłem przy pomocy messageboxow :D ) zarazem pierwszą i ostatnią wykonaną operacją jest

            if (itemsPresenter == null)
                return Binding.DoNothing;

Dalej nie sprawdza... gdzie popełniam błąd bo nie dostrzegam... ? no jasne wygląda że nie ma doczynienia z obiektem ItemsPresentr ale ma wg. mnie i nie wiem gdzie leży tu błąd... Dzięki za pomoc.

1

Kolego jeśli Ci wchodzi w tego ifa to znaczy, że NIE MA DOCZYNIENIA z obiektem ItemsPresenter. Żadne własne opinie tutaj nic nie zdziałają. Sprawdź na debugu jaki obiekt wchodzi. Może gdzieś się walnąłeś i wchodzi inny typ obiektu niż Ci się wydaje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1