gpt4 book ai didi

c# - 从 UserControl 子项访问 Window 属性

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:05 25 4
gpt4 key购买 nike

我有一个带有 TabControl 的主窗口。每个 Tab 都是一个存在于不同文件中的 UserControl。

...
<TabControl>
<TabItem>
<local:Tab1>
</TabItem>
...
<TabItem>
<local:Tab2>
</TabItem>
</TabControl>

这些用户控件应该根据访问权限的不同而有所不同。访问权限(int)在登录屏幕后通过以下方式传递到主窗口:

MainWindow mainWindow = new MainWindow(accessRights);
mainWindow.show();

现在我在 MainWindow.xaml.cs 中拥有访问权限。但是如何在 UserControls 中访问这些访问权限。

最佳答案

您可以为每个 UserControl 类添加一个依赖属性:

public class Tab1 : UserControl
{
...

public Boolean HasAccess
{
get { return (Boolean)this.GetValue(HasAccessProperty); }
set { this.SetValue(HasAccessProperty, value); }
}
public static readonly DependencyProperty HasAccessProperty = DependencyProperty.Register(
"HasAccess", typeof(Boolean), typeof(Tab1), new PropertyMetadata(false));
}

...并将其绑定(bind)到 XAML 标记中父窗口的公共(public)属性:

<TabControl>
<TabItem>
<local:Tab1 HasAccess="{Binding Path=WindowProperty, RelativeSource={RelativeSource AncestorType=Window}}" />
</TabItem>
...
</TabControl>

如何:实现依赖属性: https://msdn.microsoft.com/en-us/library/ms750428(v=vs.110).aspx

确保窗口类使用公共(public)属性公开访问权限,因为您无法绑定(bind)到字段。

另一种选择是在 UserControl 加载后使用 Window.GetWindow 方法获取对父窗口的引用:

public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
Loaded += (s, e) =>
{
MainWindow parentWindow = Window.GetWindow(this) as MainWindow;
if(parentWindow != null)
{
//access property of the MainWindow class that exposes the access rights...
}
};
}
}

关于c# - 从 UserControl 子项访问 Window 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42900950/

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