就我而言,以下代码将在堆栈上创建一个数组:
unsafe struct Foo
{
public fixed int bar[10];
}
var foo = new Foo();
Run Code Online (Sandbox Code Playgroud)
stackalloc 语句会做同样的事情:
public void unsafe foo(int length)
{
Span<int> bar = stackalloc int[length];
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道这些方法之间有什么区别。固定大小缓冲区的目的是什么?每个人都在谈论性能提升,但我不明白为什么我需要它们,当我已经可以使用 stackalloc 在堆栈上创建数组时。MSDN 表示固定大小的缓冲区用于与其他平台“互操作”。那么这个“互操作”是什么样的呢?
Visual Studio 有时会根据最近的编辑提出建议,这些建议有时非常有用。
然而,总是必须按下Alt + Enter并滚动到底部才能应用这些建议并不是真正的最佳工作流程。特别是当在不同的地方多次应用相同的建议时,它会变得非常烦人。
所以我想知道:是否有键盘快捷键可以应用我不知道的建议?由于此功能相当新,我无法在网上找到太多相关信息。
我知道这里已经有一些这样的问题,但是它们没有完全解释答案中提出的公式。
我正在编写一个解析器,它应该能够处理 MPEG-1,2,2.5 音频层 I,II,III 帧头。目标是计算帧的确切大小,包括标头、CRC(如果存在)以及该帧的任何数据或元数据(基本上是一个标头的开头和下一个标头的开头之间的字节数)。
互联网上常见的实现此目的的代码片段/公式之一是(没有特定的编程语言):
padding = doesThisFramehavePadding ? 1 : 0;
coefficient = sampleCount / 8;
// makes sense to me. the slot size seems to be the smallest addressable space in an mp3 frame
// and is thus important for padding.
slotSize = mpegLayer == Layer1 ? 4 : 1;
// all fine here. bitRate / sampleRate yields bits per sample, multiplied by that weird
// …Run Code Online (Sandbox Code Playgroud) 我的问题很简单:
如何使用 avalonia 实现叠加弹出效果?
我的意思是我想让包含我的 UI 元素的整个面板变暗一点(尝试了不透明度属性,但它看起来不太好,并且 OpacityMask 似乎只支持“透明”作为颜色,但我如果可能的话想要半透明甚至模糊)。然后我想显示一个小弹出框。如果这是 CSS 我就可以做position: absolute;,但是我不知道如何使用 avalonia 来做到这一点。
为了形象化我的意思,这里有一些 Windows 窗体应用程序的屏幕截图,我能够在其中实现所需的效果:
正如你所看到的,整个 UI 变暗了一点,而背景仍然可见(当使用 avaloniaOpacity属性时,效果不一样并且非常不一致,因为在给定位置上彼此重叠的面板越多,面板越少背景似乎受到了影响Opacity,看起来不太好。如果您愿意,我可以添加屏幕截图,说明稍后它看起来有多糟糕。)
把它们加起来:
1. 如何稍微一致地使面板及其所有内容变暗(甚至模糊?),以便仅仅因为透明度表现得很奇怪,具有相同背景颜色的堆叠面板就不会变得可见?
2. 相当于 CSS 的 avalonia 是什么position: absolute;,以便我可以将弹出窗口放在屏幕中间并位于其他所有内容之上?
因此,我尝试使用 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 …Run Code Online (Sandbox Code Playgroud) c# ×3
avaloniaui ×2
callstack ×1
inheritance ×1
intellicode ×1
lame ×1
mp3 ×1
performance ×1
reactiveui ×1
textbox ×1