创建一个UserControl
应该能够包含WPF中可用的任何可视子项的子项,子项显示在一个容器中,该容器是一个子容器UserControl
.
我无法设法让我的容器中的孩子正确显示,我尝试了serval方式,并没有找到一种适用于设计师的方法.我也尝试使用ContentControl
但没有显示任何内容.
首先,我找到了这个链接,我尝试了一些变化.我设法在正确的容器中显示内容,但它在设计器中不起作用,因为content-property是set-private而设计者想要覆盖它.将所有内容放在XAML中都有效,但在与设计师合作时这并不好.这可能是最喜欢的方式.
在此之后我试图ContentControl
通过将它的Content
-property绑定到UIElementCollection
-type 的可绑定属性来使用.这种方法不会给设计师带来任何错误,但我必须承认我从未Button
在容器中看到任何控件(例如a ).它保持空白但添加了孩子.
经过一段时间寻找一个简单快捷的解决方案后,我决定在这里寻求解决方案.我有点失望.如果微软可以将样本带入MSDN,那将非常有用.
我确信必须有一种简单的方法来存档.
感谢Andrei Gavrila和jberger,我将其存档以创建一个显示内容的节点(请参阅下面的代码),但仍有两个问题: - 没有设计师支持 - 边框(请参阅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) 在反映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
?
这可能是早期编译器的问题吗?
我目前正在为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) 我通过使用生成类型的包装器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#项目,用于测试自动化.为此,我将使用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文件设置类路径时,它可以正常工作.更多事实:
似乎java没有访问我在C#中设置的env.-variable但是认识到我在bat文件中设置它.
我真的需要通过C#设置变量,我该如何归档?
这是我的(包装的)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.
我有一个复杂的UI系统,允许很多东西,也可以用WPF完成,但支持多个平台(iOS,Android,Windows,...).它还没有完成,现在我面临以下问题:
我的设计师想要旋转物体!旋转对象远比简单的轴对齐复杂,这是我不能使用glScissor的原因.一个可能有助于理解问题的小图形:
您可以看到我需要通过" 父容器 " 的边界剪切对象" Subcontainer ".据我所知,几乎没有选择:
然而,两者似乎都会导致许多不同的问题,并可能成为性能泄漏的来源.有没有其他方式来存档我想要的或有什么方法来改善上述两种方法?
我正在设计一个屏幕键盘,
我需要确定用户设置的语言以及他现在在其他线程中使用的语言,
即我需要知道在任务栏语言切换器中选择的语言:
PS当前文化返回屏幕键盘应用程序中使用的语言,这不是我正在寻找的情况..
我想要一个图像来占用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-和HorizontalOptions来实现这一点,但第二个按钮总是被推出视图.使用特定高度也不是最佳解决方案.
似乎有可能使用相对布局,但这意味着我必须使用相对值,如果我针对不同的设备(如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)
我该怎么做呢?
我目前正在使我的个人引擎适应 Vulkan,并且我想重新实现透明窗口,我已经在 OpenGL 中实现了这一点。
我认为我需要做的就是选择正确的颜色格式(带有 alpha 通道)并将compositeAlpha
属性设置VkSwapchainCreateInfoKHR
为VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR
。
然而,用完全透明的颜色清除窗口并不能提供预期的结果。它是完全不透明的。
当然,我的窗口系统(自从我拥有 OpenGL 以来没有改变)支持它,当我只是禁用渲染时,我也无法在窗口的假定位置点击,这告诉我它在那里。
是否有任何其他必要的更改来使这项工作?
图像格式是VK_FORMAT_B8G8R8A8_UNORM
我在Sascha Willems 示例中找到的 vulkan 设置。