2016-11-18 55 views
2

我想访问我创建的弹出窗口的所有者。如何访问以编程方式创建Flyout的所有者?

我有代码:

public void dosomething(Grid lessonGrid) 
{ 
    var invisibleButton = new Button(); 
    lessonGrid.Children.Add(invisibleButton); 

    var contentGrid = new Grid() 

    var buttonInFlyOut = new Button { Content="Click" }; 
    buttonInFlyOut.Click += buttonClicked; 

    contentGrid.Children.Add(buttonInFlyOut); 

    var flyout = new FlyoutForLessons { 
     Content = contentGrid 
    }; 

    flyout.Closed += (f, h) => 
    { 
     lessonGrid.Children.Remove(invisibleButton); 
    }; 

    flyout.Owner = lessonGrid; 
    flyout.ShowAt(invisibleButton); // i want to acces a owner from parent of invisible Button -> lessonGrid 
} 

private class FlyoutForLessons : Flyout 
{ 
    private static readonly DependencyProperty OwnerOfThisFlyOutProperty = DependencyProperty.Register(
     "owner", typeof(UIElement), typeof(FlyoutForLessons), 
     null); 

    public UIElement Owner 
    { 
     get { return (UIElement) GetValue(OwnerOfThisFlyOutProperty); } 
     set { SetValue(OwnerOfThisFlyOutProperty, value); } 
    } 

} 

这段代码显示了我一个弹出窗口。所以,当我点击一个按钮“buttonInFlyOut”我想“lessonGrid”的ID从发送者在此方法:

private void buttonClicked_Click(object sender, RoutedEventArgs e) 
    { 

    } 

正如你看到的,我试图创建一个自定义属性新的弹出按钮,但我可以”在上面的方法中,从发件人处获得此弹出窗口。我不知道该怎么做,我不想创建一个私有的静态变量来保持网格出现弹出窗口的实例。

如果活立木帮助:

live tree image of flyout

回答

3

没有理由为什么你不能处理点击事件是这样的:

public void DoSomething(Grid lessonGrid) 
    { 
     var invisibleButton = new Button(); 
     lessonGrid.Children.Add(invisibleButton); 

     var contentGrid = new Grid(); 

     var buttonInFlyOut = new Button { Content = "Click" }; 
     buttonInFlyOut.Click += (o, args) => 
      { 
       this.OnButtonClicked(lessonGrid); 
      }; 

     contentGrid.Children.Add(buttonInFlyOut); 

     var flyout = new Flyout { Content = contentGrid }; 

     flyout.Closed += (f, h) => { lessonGrid.Children.Remove(invisibleButton); }; 

     flyout.ShowAt(invisibleButton); // i want to acces a owner from parent of invisible Button -> lessonGrid 
    } 

    private void OnButtonClicked(Grid lessonGrid) 
    { 
     // Do something here 
    } 

这使您可以访问网格,你传入该方法。

由于Flyout不是FrameworkElement,所以在视觉树中你永远不会发现它,这就是为什么你看到你的截图中的弹出窗口在框架之外。如果没有设置您在方法中访问的属性,或者按照上面描述的方式尝试设置属性,我认为不可能这样做。

+1

哦!谢谢,这就是我刚才需要的:D 这个问题阻止我走得更远 解决这个问题非常简单:) – Niewidzialny

+1

@Niewidzialny这完全没有问题。我很高兴我能帮上忙! –

相关问题