gpt4 book ai didi

c# - 如何访问以编程方式创建的 Flyout 的所有者?

转载 作者:行者123 更新时间:2023-11-30 21:44:43 26 4
gpt4 key购买 nike

我想访问我创建的浮出控件的所有者。

我有代码:

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)
{

}

如您所见,我尝试使用自定义属性创建一个新的 Flyout,但我无法通过上述方法从发件人处获取此 Flyout。我不知道该怎么做,而且我不想创建一个私有(private)静态变量来保留出现弹出窗口的网格实例。

如果活树有帮助:

live tree image of 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 += (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,您永远不会在可视化树中找到它,这就是为什么您在屏幕截图中看到弹出窗口位于框架之外的原因。如果不设置您在方法中访问的属性或按照我上面描述的方式尝试它,我认为不可能做到这一点。

关于c# - 如何访问以编程方式创建的 Flyout 的所有者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40685449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com