Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > ContextMenu owner


Автор: SeregaS 1.4.2009, 14:25
есть множество контектсных меню привязанных к  колонкам (Header ) DataGrida
при клике на одинаковых пунктах они вызывают однинаковые события
само контекстное меню привязывается в коде 

columnHeader.ContextMenu = new ContextMenu();

аргумент события (Sender)  возвращает ссылку на пункт меню  
по нему я нахожу само контекстное меню 
,но вот дальше как найти  columnHeader  к которому меню было привязано ??

 ни каких подходящий свойств у ContextMenu не нахожу 



Автор: Idsa 1.4.2009, 14:45
SeregaS, http://www.robmulcahey.com/blog/2008/12/15/WPFParentOfASpecificType.aspx

Автор: SeregaS 1.4.2009, 18:44
Толку в такой функции нет 
я так же точно искал родителя и без нее 
не находится родитель таким образом 

Автор: Idsa 1.4.2009, 18:50
Приложите тестовое приложение, в котором можно было бы увидеть, что 
Цитата(SeregaS @  1.4.2009,  22:44 Найти цитируемый пост)
не находится родитель таким образом  


А еще неплохо было бы указать, какой грид используется: Xceed, WPF, DevExpress и т. д.

Автор: SeregaS 1.4.2009, 20:41
грид обычный WPF 
Это не имеет значения 
суть в том что бы Найти элемент у которого Контекст меню "хостится"

Автор: SeregaS 2.4.2009, 08:37
вот так надо, но вобще говоря странно что у ContextMenu нет такого свойства 
и приходится это искать!!!
  smile 
Код

public override void EndInit()
        {
            base.EndInit();
            for (int i = 0; i < 10; i++)
            {
                TextBlock BT = new TextBlock();
                BT.Text = "text Block " + i.ToString();


                MenuItem mi = new MenuItem();
                mi.Click += new RoutedEventHandler(mi_Click);
                BT.ContextMenu = new ContextMenu();
                mi.Header = "mi.Header " + i.ToString();
                BT.ContextMenu.Items.Add(mi);

                ST.Children.Add(BT);
            }
        }

        void mi_Click(object sender, RoutedEventArgs e)
        {
            TextBlock c = ((sender as FrameworkElement).Parent as ContextMenu).PlacementTarget as TextBlock;
            MessageBox.Show(c.Text);

        }


Код

<Window x:Class="TestContextMenu.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel x:Name="ST"> </StackPanel>

   
</Window>


Добавлено через 11 минут и 55 секунд
тьфу    .PlacementTarget  Свойство ContextMenu Которое указывает на родительский элемент     smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)