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.