Fre*_*eft 1 c# inheritance textbox avaloniaui
因此,我尝试使用 Avalonia UI 框架创建一个TextBox支持SecureString(基本上我想覆盖)的自定义控件。OnTextInput()
对我来说,显而易见的方法是直接继承TextBox。像这样
namespace myProject.UI.Controls
{
public class ProtectedTextBox : TextBox
{
}
}
Run Code Online (Sandbox Code Playgroud)
根据我对继承的理解,ProtectedTextBox现在应该像TextBox它派生的那样表现得完全一样。
然而,当使用我的时,ProtectedTextBox它似乎根本没有被渲染。我确信我只是在这里犯了一些愚蠢的错误,但我一生都无法弄清楚为什么它不起作用。
这是我用于测试的 axaml 代码:
<Frame xmlns="https://github.com/avaloniaui"
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:lControls="clr-namespace:myProject.UI.Controls;assembly=myProject"
mc:Ignorable="d" d:DesignWidth="1440" d:DesignHeight="900"
x:Class="myProject.UI.Frames.TestFrame">
<DockPanel Width="1440" Height="900">
<Panel DockPanel.Dock="Top" Background="Aqua">
<TextBox Width="200" Height="100" Background="Red"/>
</Panel>
<Panel/>
</DockPanel>
</Frame>
Run Code Online (Sandbox Code Playgroud)
它产生了以下完美的输出:(我们有一个丑陋但工作正常的TextBox)

ProtectedTextBox当我使用 my (直接派生自TextBox)时,我不会期望有任何差异
<Frame xmlns="https://github.com/avaloniaui"
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:lControls="clr-namespace:myProject.UI.Controls;assembly=myProject"
mc:Ignorable="d" d:DesignWidth="1440" d:DesignHeight="900"
x:Class="myProject.UI.Frames.TestFrame">
<DockPanel Width="1440" Height="900">
<Panel DockPanel.Dock="Top" Background="Aqua">
<lControls:ProtectedTextBox Width="200" Height="100" Background="Red"/>
</Panel>
<Panel/>
</DockPanel>
</Frame>
Run Code Online (Sandbox Code Playgroud)
然而它只是不可见并且不会被渲染。ProtectedTextBox (Avalonia DevTools 似乎知道它存在,并且当在 LogicalTree 中选择它时,我应该突出显示的
位置)。
那么就出现了几个问题:
GetType()会为这些不同的类返回不同的东西)?TextBox?是否有可能(无需我自己痛苦地重新创建它的所有功能)?小智 6
只需使用 StyleKey 并实现 IStyleable 即可,如下所示:
public class MyTextBox : TextBox, IStyleable
{
Type IStyleable.StyleKey => typeof(TextBox);
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1603 次 |
| 最近记录: |