我试图在运行时定义一个继承自已知类并实现接口的类型.
public class ParentClass
{
}
public interface IImplementMe
{
double Value{get;set}
}
Run Code Online (Sandbox Code Playgroud)
以下是显示我如何实现目标的代码段.
public class ClassBuilder
{
public Type Build()
{
try
{
AssemblyName assemblyName = new AssemblyName("DataBuilderAssembly");
AssemblyBuilder assemBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemBuilder.DefineDynamicModule("DataBuilderModule");
TypeBuilder typeBuilder = moduleBuilder.DefineType("NewClass", TypeAttributes.Class, typeof(ParentClass));
typeBuilder.AddInterfaceImplementation(typeof(IImplementMe));
BuildProperty(typeBuilder, "Value", typeof(double));
Type type = typeBuilder.CreateType();
return type;
}
catch (Exception e)
{
return null;
}
}
private void BuildProperty(TypeBuilder typeBuilder, string name, Type type)
{
FieldBuilder field = typeBuilder.DefineField("m" + name, type, FieldAttributes.Private); …Run Code Online (Sandbox Code Playgroud) 我一直在网上搜索一段时间但仍然没有找到任何解决我问题的好方法.我想让MS Chart在滚动时自动重新缩放Y轴,以确保所有数据点都可见.这里的转折是我需要能够排除某些系列用于自动缩放.到目前为止,我只找到了解决方案,它们可以在AxisViewChanged事件中迭代整个点集合,当你有大量的点集合和几个迭代的系列时,这种解决方案效果不佳.我想知道是否有办法通过获取当前可见的最小和最大X值之间的数据点来缩小搜索范围.任何帮助,将不胜感激.
编辑 Heres图像.正如您所看到的,中间的烛台并不完全可见.
一个简单的问题.假设我有一个如下例所示的类.
class Subscriber
{
private Publisher publisher = new Publisher;
public Subscriber()
{
publisher.SomeEvent += new EventHandler(OnEventFired);
}
private void OnEventFired(object sender, EventArgs e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
在程序的某个地方,我有一个看起来像这样的方法:
public void DoSomething()
{
Subscriber subscriber = new Subscriber();
}
Run Code Online (Sandbox Code Playgroud)
我是否正确地期望这会导致内存泄漏,因为订阅者永远不会取消订阅发布者事件,从而导致他们都保持对彼此的强引用?
我已经为此苦恼了一段时间,但看在上帝的份上,我就是不明白我的 uri 出了什么问题。也许有人可以帮忙。
我正在为第三方软件开发一个插件(意味着我无权访问 App.config 并且无法修改应用程序本身)。该插件所在的文件夹与 exe 文件所在的位置不同。我有一个位于 MyAddin.View.dll 中的 wpf 窗口。最近,我决定将所有 WPF 资源移至单独的程序集(称为 UI.Shared)中。我已添加 UI.Shared.dll 作为对 MyAddin.View.dll 的引用,我还将 MyAddin.View.dll 窗口内的包 uri 修改为:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="pack://application:,,,/UI.Shared;component/Styles/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
我已确保 Style.xaml Build Action 设置为 Resource。UI.Shared.dll 与 MyAddin.View.dll 位于同一文件夹中(但它们与应用程序可执行文件不在同一文件夹中)。设计时一切正常。但在运行时,我得到:
“设置属性‘System.Windows.ResourceDictionary.Source’抛出异常。”
内部异常表示:
无法加载文件或程序集“UI.Shared,Culture=neutral”或其依赖项之一。该系统找不到指定的文件。
在我将资源移动到单独的程序集中之前,一切都工作正常:(。有人可以帮忙吗?
任何人都可以提供一个如何在运行时创建结构实例的示例吗?我正在使用的结构没有定义任何构造函数,只是字段.GetConstructor()方法返回null,到目前为止我无法找到实现此目的的方法.
我一直在研究自定义控件,我遇到了一个问题,TextRenderer的表现有点令人惊讶.在我的OnPaint事件中,我将变换应用于Graphics对象以补偿滚动位置,如下所示:
e.Graphics.Transform = new System.Drawing.Drawing2D.Matrix(1, 0, 0, 1, this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
Run Code Online (Sandbox Code Playgroud)
然后我将图形对象传递给控件的所有子元素,以便它们自己绘制到它上面.其中一个元素应该将文本字符串绘制到图形表面上.这就是我遇到问题的地方.滚动时,此行似乎正常工作:
e.Graphics.DrawString(this.Text, this.Font, brush, new PointF(this.Rectangle.X, this.Rectangle.Y));
Run Code Online (Sandbox Code Playgroud)
但是当我使用TextRenderer时,我得到了完全不同的结果.下面是应该绘制文本的文本行:
TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.Rectangle, this.TextColor, TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.PreserveGraphicsTranslateTransform);
Run Code Online (Sandbox Code Playgroud)
我认为这两行应该产生相同的结果.但由于某种原因,第二个应用不同的图形变换,因此,当我滚动控件时,所有文本行以不同于绘图表面上其余元素的速度移动.有人能解释我为什么会这样吗?