2013-05-09 1 views
1

Я хочу привязать элемент управления к родительскому элементу из контекстного меню в datatemplate.Связать с родительским элементом управления из контекстного меню в шаблоне данных

К сожалению, я ограниченный в .NET 3.5 и не могу использовать х: ссылочное расширение введенного в .net 4.

Ниже приведен пример того, что я пытаюсь сделать

<Window x:Class="WpfApplication17.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication17" 
    Name="window"> 

    <Window.Resources> 
     <DataTemplate DataType="{x:Type local:Car}"> 
      <Rectangle Width="100" Height="100" Fill="Red"> 
       <Rectangle.ContextMenu> 
        <ContextMenu> 
         <MenuItem Header="{Binding Colour}"/> 
         <MenuItem Header="{Binding ElementName=window, Path=ActualWidth}"/> 
        </ContextMenu> 
       </Rectangle.ContextMenu> 
      </Rectangle> 
     </DataTemplate> 
    </Window.Resources> 
</Window> 

Но я получаю «Не могу найти источник для привязки со ссылкой« ElementName = window »из-за того, что контекстное меню не является частью визуального дерева.

Редактировать:

Это отлично работает! .. однако, это, кажется, не работает, когда я использую составную коллекцию таких как следующий

<Window.Resources> 
     <DataTemplate DataType="{x:Type local:Car}"> 
      <Rectangle Width="100" Height="100" Fill="Red" 
       Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}"> 
       <Rectangle.ContextMenu> 
        <ContextMenu> 
         <ContextMenu.ItemsSource> 
          <CompositeCollection> 
           <MenuItem Header="{Binding Colour}"/> 
           <MenuItem Header="{Binding Path=PlacementTarget.Tag.ActualWidth, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> 
          </CompositeCollection> 
         </ContextMenu.ItemsSource> 
        </ContextMenu> 

        <!--<ContextMenu> 
         <MenuItem Header="{Binding Colour}"/> 
         <MenuItem Header="{Binding Path=PlacementTarget.Tag.ActualWidth, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> 
        </ContextMenu>--> 

       </Rectangle.ContextMenu> 
      </Rectangle> 
     </DataTemplate> 
    </Window.Resources> 

ответ

2

Пожалуйста, попробуйте следующее:

<DataTemplate DataType="{x:Type local:Car}"> 
    <Rectangle Width="100" Height="100" Fill="Red" 
       Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}"> 
     <Rectangle.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="{Binding Colour}"/> 
       <MenuItem Header="{Binding Path=PlacementTarget.Tag.ActualWidth, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> 
      </ContextMenu> 
     </Rectangle.ContextMenu> 
    </Rectangle> 
</DataTemplate> 

Смотрите мой ответ here тоже.

+0

Это отлично работает! .. но он, похоже, не работает, когда я использую составную коллекцию? - см. мое редактирование – wforl

+0

Извините, но для этого у меня нет решения. Тот же вопрос [здесь] (http://stackoverflow.com/q/11626114/620360). Возможно, подобная ошибка описана здесь (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b15cbd9d-95aa-47c6-8068-7ae9f7dca88a). – LPL

 Смежные вопросы

  • Нет связанных вопросов^_^