从用户控件中访问主窗口中的用户控件名称
本文关键字:控件 用户 访问 窗口 | 更新日期: 2023-09-27 18:24:22
我似乎无法从用户控件中访问在MainWindow.xaml
中的用户控件上设置的x:Name
属性。
this.Name
属性为空!可能,这不是我要查找的属性(为什么我不能在同一程序集中使用UserControl的Name属性?)。
我尝试在UserControl1()
构造函数中标准InitializeComponent();
之后的一个伪行上放置调试停止,并深入研究各种基类中的属性,但没有找到任何可重置x:Name
的内容。
我的MainWindow.xaml如下所示:
<Window x:Class="UserControlName.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xw="clr-namespace:UserControlName"
Title="MainWindow" Height="350" Width="525">
<Grid>
<xw:UserControl1 x:Name="sup" />
</Grid>
</Window>
这是我的UserControl1.xaml:
<UserControl x:Class="UserControlName.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Label x:Name="sup" Content="Label" HorizontalAlignment="Left" Margin="134,146,0,0" VerticalAlignment="Top"/>
</Grid>
</UserControl>
以及UserControl1.cs:内的代码
public UserControl1()
{
InitializeComponent();
this.sup.Content = "label: " + this.Name;
}
标签应该设置为"label:sup",但是this.name是空的,所以它只是标签。
如果在用户控件中添加按钮,那么x:Name属性将在调用构造函数后应用
<StackPanel>
<Label x:Name="sup" Content="Label" HorizontalAlignment="Left" Margin="134,146,0,0" VerticalAlignment="Top"/>
<Button Height="25" Width="100" Click="ButtonBase_OnClick"></Button>
</StackPanel>
和
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
this.sup.Content = "label: " + this.Name;
}
这将使用主窗口中提供的名称更新标签。
要在不进行交互的情况下更新,请将其添加到用户控制定义中
Loaded="UserControl1_OnLoaded"
在码尾
private void UserControl1_OnLoaded(object sender, RoutedEventArgs e)
{
this.sup.Content = "label: " + this.Name;
}