Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 闪烁体在WPF应用中的奇怪尺寸调整_C#_Wpf_Xaml_Scintilla_Windowsformshost - Fatal编程技术网

C# 闪烁体在WPF应用中的奇怪尺寸调整

C# 闪烁体在WPF应用中的奇怪尺寸调整,c#,wpf,xaml,scintilla,windowsformshost,C#,Wpf,Xaml,Scintilla,Windowsformshost,我想在我的WPF应用程序中使用一些小型闪烁控件。我已经从闪烁网存储库编译了WPF分支。 我添加了Scrintilla控件: 控件看起来很好。如果我增加控件,闪烁控件也会增加,但如果我减少控件,闪烁控件将保持大小并与其他UI重叠 我查看了skillanet.WPF的示例应用程序:SCide.WPF。在这个应用程序中,一切都很好,但我看不到我的代码有任何相关的差异 我认为调整尺寸和重叠是两个不同的问题。 我还尝试了没有WPF包装的普通WindowsFormsHost,但在那里我遇到了同样的问题

我想在我的WPF应用程序中使用一些小型闪烁控件。我已经从闪烁网存储库编译了WPF分支。 我添加了Scrintilla控件:


控件看起来很好。如果我增加控件,闪烁控件也会增加,但如果我减少控件,闪烁控件将保持大小并与其他UI重叠

我查看了skillanet.WPF的示例应用程序:SCide.WPF。在这个应用程序中,一切都很好,但我看不到我的代码有任何相关的差异

我认为调整尺寸和重叠是两个不同的问题。 我还尝试了没有WPF包装的普通WindowsFormsHost,但在那里我遇到了同样的问题

有人能帮忙吗

编辑:
只有当闪烁控制在列表中时才会发生这种情况

我知道这个问题非常老,但我想在这里留下一个解决方案,以防其他人遇到这种情况。闪烁网似乎不喜欢托管在WPF ScrollViewer控件中

我无意中让我的WindowsFormHost控件由一个ContentPresented呈现,它位于(您猜对了)ScrollViewer中。即使使用ScrollViwer with ScrollBarVisibility禁用/隐藏垂直滚动条也不起作用。这似乎也与虚拟化无关,因为必须启用虚拟化。由于斯金塞拉实现了自己的滚动,解决方案是避免在任何形式的ScrollViewer中托管斯金塞拉网,而只让它以本机方式处理滚动内容


您的问题是列表有一个ScrollViewer。把它拿出来,它应该会修复它。

我知道这个问题非常老,但我也遇到了同样的问题,并用一个自定义面板解决了它,该面板最小化了文本编辑器所需的大小:

public class ScintillaPanel : Panel
{
    protected override Size MeasureOverride(Size availableSize)
    {
        var children = InternalChildren.OfType<UIElement>();
        var firstChild = children.FirstOrDefault();
        if (firstChild != null)
            firstChild.Measure(new Size(0, 0));
        return new Size(0, 0);
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        var children = InternalChildren.OfType<UIElement>();
        var firstChild = children.FirstOrDefault();
        if (firstChild != null)
            firstChild.Arrange(new Rect(0, 0, finalSize.Width, finalSize.Height));
        return finalSize;
    }
}
公共类闪烁面板:面板
{
受保护的覆盖尺寸测量覆盖(尺寸可用尺寸)
{
var children=InternalChildren.OfType();
var firstChild=children.FirstOrDefault();
if(firstChild!=null)
firstChild.Measure(新大小(0,0));
返回新的大小(0,0);
}
受保护的替代尺寸排列替代(尺寸最终化)
{
var children=InternalChildren.OfType();
var firstChild=children.FirstOrDefault();
if(firstChild!=null)
firstChild.Arrange(新的Rect(0,0,finalSize.Width,finalSize.Height));
返回最终化;
}
}
然后像这样包装闪烁控制:

<local:ScintillaPanel>
    <WindowsFormsHost>
        <scintilla:Scintilla/>
    </WindowsFormsHost>
</local:ScintillaPanel>

谢谢您的回答。我已经有这个问题了,但我需要列表中的闪烁控制。你知道另一种解决办法吗?