c# - 如何找到 UserControl 父级?
问题描述
我想从 Markup 中找到 usercontrol 的父级,我使用了以下代码
var hostRoot = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
var host = hostRoot.RootObject;
var do = host as DependencyObject;
var uc = do as UserControl;
var ucParent = uc.Parent;
和
var wp = Window.GetWindow(uc);
但两者都返回 null
更新:
<Window x:Class="WpfApp12.MainWindow">
<Grid>
<local:UserControl1/>
</Grid>
</Window>
和
<UserControl x:Class="WpfApp12.UserControl1">
<StackPanel>
<TextBlock Text="{me:myMarkup}"/>
</StackPanel>
</UserControl>
更新 2:
这是我的标记
public class myMarkup : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
var hostRoot = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
var host = hostRoot.RootObject;
var xv = host as DependencyObject;
var ww = Window.GetWindow(xv);
return null;
}
}
更新 3:示例项目
https://github.com/ghost1372/HandyControls/files/6259944/WpfApp18.zip
解决方案
在调用之前,您需要等到UserControl
已加载Window.GetWindow
:
public class myMarkup : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
var hostRoot = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
var host = hostRoot.RootObject;
var xv = host as FrameworkElement;
//local function:
void OnLoaded(object sender, RoutedEventArgs e)
{
FrameworkElement xv = (FrameworkElement)sender;
Window parentWindow = Window.GetWindow(xv);
//do something with the window...
}
Window parentWindow;
if (xv.IsLoaded)
{
parentWindow = Window.GetWindow(xv);
//do something with the window...
}
else
{
xv.Loaded += OnLoaded;
}
return null;
}
}
推荐阅读
- java - 浏览器如何请求 SSL 证书?
- python - 如何使用 package.json 调用设置环境变量并让其他脚本和命令可以访问这些变量的脚本
- ruby-on-rails - 如何修复索引缺少请求格式的模板:text/html
- gitlab - VPS上Gitlab仓库地址
- awk - 在一堆文件上使用awk时如何获得propper行?
- c# - 是否有某种类型的checkedListBox ItemUnchecked/CheckChanged 事件?
- ios - NSFetchedResultsController 不知道数据已被 NSBatchUpdateRequest 更改
- angular - Fullcalendar 显示少一天的事件
- python - 使用 OpenCV 将 Hough_Circles 转换为热图
- java - Spring Boot - 不支持内容类型 'application/x-www-form-urlencoded;charset=UTF-8'