gpt4 book ai didi

c# - 为什么这个用户控件扩展中的所有对象在运行时都是空的?

转载 作者:行者123 更新时间:2023-11-30 17:22:54 25 4
gpt4 key购买 nike

全部,

我有一个简单的类。

public class Container : UserControl
{
public bool IsClickable { get; set; }
}

我有一个扩展这个类的类。

public class ScrollingContainer : Container
{
public void Draw()
{

}

public void Update()
{

}
}

我有一个自定义类,然后扩展了 ScrollingContainer。

public partial class MaskContainer : ScrollingContainer
{

public MaskContainer()
{
InitializeComponent();
}
}

XAML

<local:ScrollingContainer x:Class="Test.Types.MaskContainer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:GameObjects;assembly=GameObjects"
mc:Ignorable="d"
>
</local:ScrollingContainer>

在我的 mainpage.xaml 中,我有以下内容。

<types:MaskContainer x:Name="maskContainer" Canvas.ZIndex="1" Width="Auto" Height="Auto">
<Canvas x:Name="maskCanvas">
<Button x:Name="button1" Content="test button"/>
</Canvas>
</types:MaskContainer>

为什么在运行时,maskCanvas 和 button1 都为空? maskContainer 不为空。

这里的继承应该很简单。 Container继承了usercontrol。可滚动容器继承容器。 Mask Container 继承了可滚动的容器。为什么我在这个级别上失去了原始基类的功能?将元素(button1)添加到 main.xaml 内部的 maskcontainer 中是否不正确?

我的最终目标是创建一个可重用的容器,但继承了我在整个链中指定的所有属性/方法。

感谢任何帮助。

最佳答案

问题是,MaskContainer 有一个附加的 XAML 文件,这使得 WPF 代码生成器生成一个实现 System.Windows.Markup.IComponentConnector 的类。当控件实现该接口(interface)时,它获得了一个全新的特性:它变成了一个命名范围根。这意味着在这样的控件内部,有一个完整的独立命名空间。外部控件名称与内部控件名称不冲突。

在这种特殊情况下,这意味着 maskCanvasbutton1 按名称在 mainpage 中不可见,但在内部可见MaskContainer 代替。

事实上,我很惊讶你竟然设法以某种方式编译了它。根据我的经验,如果您在 Visual Studio 中尝试这个技巧,它会提示 maskCanvas 是“在元素 MaskContainer 的范围内”。您是否偶尔使用命令行编译?

好的,废话已经说够了。

解决方案是什么?只需从 MaskContainer 中删除 XAML 文件即可。这将摆脱自动生成的 IComponentConnector 实现,一切都会按您预期的那样工作。

关于c# - 为什么这个用户控件扩展中的所有对象在运行时都是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2541009/

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