2017-02-23 50 views
1

У меня есть <DataTemplate>, как определено ниже, который содержит <TextBlock>Изменения DataTemplate TextBlock Видимость определяется типом родительского контейнера

В <DataTemplate> используется в нескольких экземплярах <ListBox> и повторно использовать в других местах в <ContentControl>

Примечания код упрощены для краткости

<DataTemplate x:Key="SetsItemTemplate" DataType="viewModel:SetVm"> 
    <TextBlock 
     Visibility="{Binding <somethign here i guess>, 
      ConverterParameter=collapse, 
      Converter={StaticResource BoolToVisConverter}}"> 
    </TextBlock> 
</DataTemplate> 

<ListBox ItemTemplate="{StaticResource SetsItemTemplate}" /> 

<ContentControl ContentTemplate="{StaticResource SetsItemTemplate}" /> 

<TextBlock> имеет boolToVisibility конвертер для сворачивания <TextBlock> о состоянии, однако я действительно нужно, что условие, чтобы проверить, если родительский контейнер является <ContentControl>

Т.е. если <DataTemplate> родитель является <ContentControl> Свертывание <TextBlock>

Может я мог используйте имена, чтобы сделать это проще (я не уверен)

ответ

1

Чтобы получить доступ к родительскому объекту, вам необходимо получить sender или исходный объект. Вы не можете получить это, используя IValueConverter. Но, у них уже есть решение для этого:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/9f3e4f6d-20d2-4c13-90a2-7c157ed4f8c3/ivalueconverter-pass-calling-object-as-converterparameter?forum=wpf

Теперь вы можете получить доступ к элементу и получить родитель через:

element = VisualTreeHelper.GetParent(element) as UIElement; 

Надеется, что это помогает!

1

Вы можете изменить видимость на основе родительского элемента, как указано в приведенной выше ссылке msdn. вы можете достичь этого, используя свойство имени родительского элемента с BoolToVisibilityConverter. Как привязать имя элемента к свойству TextBlock Visibility с конвертером и определить видимость в конвертере на основе ограниченного ElementNameProperty.