小编Fel*_* K.的帖子

将子项添加到UserControl

我的任务

创建一个UserControl应该能够包含WPF中可用的任何可视子项的子项,子项显示在一个容器中,该容器是一个子容器UserControl.

我的问题

我无法设法让我的容器中的孩子正确显示,我尝试了serval方式,并没有找到一种适用于设计师的方法.我也尝试使用ContentControl但没有显示任何内容.

我的方法

首先,我找到了这个链接,我尝试了一些变化.我设法在正确的容器中显示内容,但它在设计器中不起作用,因为content-property是set-private而设计者想要覆盖它.将所有内容放在XAML中都有效,但在与设计师合作时这并不好.这可能是最喜欢的方式.

在此之后我试图ContentControl通过将它的Content-property绑定到UIElementCollection-type 的可绑定属性来使用.这种方法不会给设计师带来任何错误,但我必须承认我从未Button在容器中看到任何控件(例如a ).它保持空白但添加了孩子.

结论

经过一段时间寻找一个简单快捷的解决方案后,我决定在这里寻求解决方案.我有点失望.如果微软可以将样本带入MSDN,那将非常有用.

我确信必须有一种简单的方法来存档.

现在的情况

感谢Andrei Gavrilajberger,我将其存档以创建一个显示内容的节点(请参阅下面的代码),但仍有两个问题: - 没有设计师支持 - 边框(请参阅xaml)未在设计器中显示,并且在应用程序时未显示正在运行甚至没有保证金

public class NodeContent : ContentControl
{
    static NodeContent()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(NodeContent), new FrameworkPropertyMetadata(typeof(NodeContent)));
    }
}

public partial class Node : UserControl, INotifyPropertyChanged
{
    UIElementCollection _Elements;

    public event PropertyChangedEventHandler PropertyChanged;

    public UIElementCollection NodeContent
    {
        get { return _Elements; }
        set
        {
            _Elements = …
Run Code Online (Sandbox Code Playgroud)

c# wpf user-controls wpf-controls

23
推荐指数
1
解决办法
3万
查看次数

奇怪的队列<T> .Enqueue(T item)代码

在反映ILSpy的同时,我在Queue<T>.Enqueue(T item)-method中找到了这行代码:

if (this._size == this._array.Length)
{
    int num = (int)((long)this._array.Length * 200L / 100L);
    if (num < this._array.Length + 4)
    {
        num = this._array.Length + 4;
    }
    this.SetCapacity(num);
}
Run Code Online (Sandbox Code Playgroud)

我只是想知道为什么有人会这样做?我认为这是一种整数溢出检查,但为什么先乘以200L然后除以100L

这可能是早期编译器的问题吗?

.net c#

13
推荐指数
1
解决办法
512
查看次数

计算在接缝处结束的2个网格之间的法线

我的任务

我目前正在为Unity3D创建一个地形,专门用于运行应用程序的内存不足的移动设备.允许大小为15.000 x 15.000千米且高度为-1.000米到10.000米的地形,并且它的唯一限制是硬盘上的空间.

情况

现在一切都运行正常,除了不正确地计算不同网格之间的法线(每个网格具有细分级别).这是两张可视化问题的图片:

带有显示三角形的网格 仅与法线网格

问题仅发生在从一个细分级别到另一个细分级别的转换上.如果两个网格具有相同的级别,则效果很好.我首先想到在计算法线时我会错过一些面孔,但似乎它们都包含在计算中.

一些代码

每张脸的正常计算:

Vector3 u = vertices[item.Face1] - vertices[item.Face0];
Vector3 v = vertices[item.Face2] - vertices[item.Face0];

Vector3 fn = new Vector3((u.Y * v.Z) - (u.Z * v.Y), (u.Z * v.X) - (u.X * v.Z), (u.X * v.Y) - (u.Y * v.X));
fn.Normalize();
Run Code Online (Sandbox Code Playgroud)

在计算顶点周围的每个面的法线之后,我将所有面法线添加到顶点法线并对其进行标准化.结果显示在图片中,正如您在背景和网格本身中看到的那样,只要没有不同的细分级别,它就可以工作.

一些更多的代码

/// <summary>
/// This is a static indicies array which contains all indicies
/// for all possible meshes.
/// </summary>
private static readonly Int32[] // Subdivision
                             [] // All borders
                             [] …
Run Code Online (Sandbox Code Playgroud)

c# 3d mesh normals

12
推荐指数
1
解决办法
2057
查看次数

ILGenerator捕获异常不起作用

我通过使用生成类型的包装器System.Reflection.Emit.有一次,原始对象可能会在access(FaultException)上抛出一个错误,错误应该由我try { } catch (Exception e) { }实现的错误捕获,但事实并非如此.

代码由ILSpy正确显示.

try
{
    if (original.Station != null)
    {
        if (objectDictionary.ContainsKey(original.Station))
        {
            this.Station = (objectDictionary[original.Station] as StationWrapper);
        }
        else
        {
            this.Station = new StationWrapper(original.Station, objectDictionary);
        }
    }
}
catch (Exception arg_6D_0)
{
    ReportManager.Log(arg_6D_0);
}
Run Code Online (Sandbox Code Playgroud)

代码生成

这是组装生成的代码.

Label ex = il.BeginExceptionBlock();
....
// Exception block end
il.Emit(OpCodes.Leave, ex);
il.BeginCatchBlock(typeof(Exception));
il.Emit(OpCodes.Call, ReportManager_Log);
il.EndExceptionBlock();
Run Code Online (Sandbox Code Playgroud)

编辑

例外是被用户代码捕获而不是被IL-Code捕获.

拆卸

在这里删除了客户的一些名称空间.写行已在最后几分钟添加.

.try
{
    IL_0019: ldarg.1
    IL_001a: call instance class [...]...Station [...]...StationBase::get_Station() …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling reflection.emit ilgenerator

12
推荐指数
2
解决办法
1398
查看次数

环境变量对java不可见

该项目

该项目是一个大型C#项目,用于测试自动化.为此,我将使用java工具,该工具将所有结果保存到可以加载到测试环境中的文件中.

界面

我从测试环境的供应商那里得到了一个用C++构建的DLL,这个DLL加载了java环境并加载了jar文件.

现在的情况

java环境加载成功,使用此方法在C#中设置环境变量:

String java = GetJavaInstallationPath();
Environment.SetEnvironmentVariable("PATH", String.Format("{0};{1}", Environment.GetEnvironmentVariable("PATH"), Path.Combine(java, @"bin\client")), EnvironmentVariableTarget.Process);
Run Code Online (Sandbox Code Playgroud)

在此之后,我使用以下代码设置java类的路径:

Environment.SetEnvironmentVariable("ITEPCLASSPATH",
                String.Format("{0};{1}",
                Path.Combine(iTepPath, "itep.jar"),
                Path.Combine(iTepPath, "libs\\itorx.jar")), EnvironmentVariableTarget.Process);
Run Code Online (Sandbox Code Playgroud)

实际应该工作,它在使用时显示正确的值,Environment.GetEnvironmentVariable("ITEPCLASSPATH")但C++ - DLL告诉我它不起作用.

使用外部bat文件设置类路径时,它可以正常工作.更多事实:

  • 该应用程序由bat文件启动
  • 从我生成的dll路径复制路径
  • 我没有评论任何东西,所以路径仍由C#设置

似乎java没有访问我在C#中设置的env.-variable但是认识到我在bat文件中设置它.

我真的需要通过C#设置变量,我该如何归档?

c# java environment-variables

7
推荐指数
1
解决办法
1331
查看次数

glTexImage2D导致GL_INVALID_OPERATION

这是我的(包装的)OpenGL调用,它导致GL_INVALID_OPERATION:

GLTextures.TexImage2D(TexImage2DTarget.TEXTURE_2D, 0, TexImageInternalFormat.LUMINANCE_ALPHA, Width, Height, TexImageFormat.LUMINANCE_ALPHA, TexImagePixelType.UNSIGNED_BYTE, source.GetData());
Run Code Online (Sandbox Code Playgroud)

此调用适用于Windows但不适用于iOS,在Windows中一切正常并且显示纹理.我在iOS和Windows上使用相同的枚举值,甚至着色器也是相同的(在iOS上有一些精确的提示).最多的纹理也适用于iOS.

opengl-es ios

6
推荐指数
1
解决办法
1691
查看次数

在OpenGL中绘制剪切UI元素的最佳方法

我有一个复杂的UI系统,允许很多东西,也可以用WPF完成,但支持多个平台(iOS,Android,Windows,...).它还没有完成,现在我面临以下问题:

我的设计师想要旋转物体!旋转对象远比简单的轴对齐复杂,这是我不能使用glScissor的原因.一个可能有助于理解问题的小图形:

影响

您可以看到我需要通过" 父容器 " 的边界剪切对象" Subcontainer ".据我所知,几乎没有选择:

  • 使用模板缓冲区,在这种情况下我遇到了一个问题,因为我有不可见的对象,还必须影响模板缓冲区,因为它们可能会掩盖子对象.此外,我必须绘制每个对象两次,因为我需要在返回层次结构时减少模板缓冲区.
  • 切割用于绘制UI对象的平面(三角形;或任何其他ui模型),这看起来很有代价,因为它们可能会在不同的点处剪切(想象一个旋转容器中旋转容器中的容器). ..)也很难正确剪辑它们,它可能是性能问题的根源

然而,两者似乎都会导致许多不同的问题,并可能成为性能泄漏的来源.有没有其他方式来存档我想要的或有什么方法来改善上述两种方法?

c# opengl

6
推荐指数
1
解决办法
2204
查看次数

如何确定当前的输入语言?

我正在设计一个屏幕键盘,

我需要确定用户设置的语言以及他现在在其他线程中使用的语言,

即我需要知道在任务栏语言切换器中选择的语言:

语言切换器

PS当前文化返回屏幕键盘应用程序中使用的语言,这不是我正在寻找的情况..

c# keyboard winapi keyboard-hook

5
推荐指数
2
解决办法
6536
查看次数

让图像只占用剩余空间

我想要一个图像来占用a中的剩余空间StackLayout,但是在XAML中这似乎是不可能的.图像始终尝试以可用的最大尺寸显示自身.

<StackLayout>
  <Image Source="{Binding ProfileImage}" Aspect="AspectFit" HorizontalOptions="Center" VerticalOptions="Start" />
  <StackLayout Orientation="Vertical" HorizontalOptions="Fill" VerticalOptions="EndAndExpand">
    <Button HorizontalOptions="FillAndExpand" VerticalOptions="End" x:Name="_ButtonShare" Text="Share" />
    <Button HorizontalOptions="FillAndExpand" VerticalOptions="End" x:Name="_ButtonExternalLinks" Text="External links"/>
  </StackLayout>
</StackLayout>
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的Vertical-和Horizo​​ntalOptions来实现这一点,但第二个按钮总是被推出视图.使用特定高度也不是最佳解决方案.

似乎有可能使用相对布局,但这意味着我必须使用相对值,如果我针对不同的设备(如iPhone4S和iPhone5),这不是一个好主意.

<RelativeLayout>
  <Image Source="{Binding ProfileImage}" Aspect="AspectFit"
         RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=1}"
         RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.7}"/>
  <StackLayout Orientation="Vertical"
         RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.8}"
         RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=1}"
         RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.2}">
    <Button HorizontalOptions="FillAndExpand" VerticalOptions="End" x:Name="_ButtonShare" Text="Share" />
    <Button HorizontalOptions="FillAndExpand" VerticalOptions="End" x:Name="_ButtonExternalLinks" Text="External links"/>
  </StackLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

xamarin xamarin.forms

5
推荐指数
1
解决办法
1859
查看次数

Vulkan 和透明窗口

我目前正在使我的个人引擎适应 Vulkan,并且我想重新实现透明窗口,我已经在 OpenGL 中实现了这一点。

我认为我需要做的就是选择正确的颜色格式(带有 alpha 通道)并将compositeAlpha属性设置VkSwapchainCreateInfoKHRVK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR

然而,用完全透明的颜色清除窗口并不能提供预期的结果。它是完全不透明的。

当然,我的窗口系统(自从我拥有 OpenGL 以来没有改变)支持它,当我只是禁用渲染时,我也无法在窗口的假定位置点击,这告诉我它在那里。

是否有任何其他必要的更改来使这项工作?

一些信息

图像格式是VK_FORMAT_B8G8R8A8_UNORM我在Sascha Willems 示例中找到的 vulkan 设置。

vulkan

4
推荐指数
1
解决办法
1302
查看次数