Tag: wpf

如何模拟Application.Current进行unit testing?

我有这个: 还有这个: public class GrayscaleEffect : ShaderEffect{ private static PixelShader _pixelShader = new PixelShader() { UriSource = new Uri(@”pack://application:,,,/Effects/GrayscaleEffect.ps”) }; /* … rest of the class … */ } 当我对它进行unit testing( MSTest )时,它显然会引发IOException (因为Application.Current为null,因此pack://application:,,,/…指向无处),并出现此错误: Assembly.GetEntryAssembly() returns null. Set the Application.ResourceAssembly property or use the pack://application:,,,/assemblyname;component/ syntax to specify the assembly to load the resource from. […]

使用MEF时,Type.GetType返回null

我目前正在使用MEF来导入插件项目,因为插件是用WPF编写的,每个插件都有一个视图和一个viewmodel。 插件知道viewmodel,但主shell UI将构造视图并使用约定优于配置类型模式绑定viewmodel。 我使用了Build-your-own-MVVM-framework示例中的一些代码来执行自动视图发现: [ImportMany(typeof(IPlugin))] public IEnumerable Plugins { get; set; } var viewTypeName = this.Plugins.First().ViewModel.GetType().AssemblyQualifiedName.Replace(“Model”, string.Empty); var viewType = Type.GetType(viewTypeName,true); 目前的代码只是获取第一个插件并从名称中取出Model ,返回视图名称并获取视图类型以便我可以构造它。 那么viewType的一个例子是: PluginTest.TestView, PluginTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 但是,当我调用Type.GetType(viewType)我得到null,如果我添加true以抛出exception,我得到exception: Could not load file or assembly ‘PluginTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The system cannot find the file specified. 即使已经使用MEF加载了它。 如果我做: var […]

AssemblyTitle一旦设置就永远不会改变,我希望每个配置都改变它

我想根据产品名称更改下面屏幕截图中显示的文字。 我知道,该文本来自Assembly.Title属性,它是一个只读属性,因此无法在运行时更改。 那么如何在编译时更改它? 我们将应用程序出售给多个客户,应用程序的名称应根据客户进行更改。 我们为每位客户提供配置。 因此,在构建时,应根据配置选择程序集标题。 有什么建议怎么解决这个问题? 更新: 我尝试了评论中给出的一些建议,我发现如下: 使用项目属性中的程序集信息弹出窗口设置文本或直接在AssemblyInfo.cs文件中更改它后,它在任务栏中正确显示。 如果我再次更改它,更改的文本不会显示在任务栏中,即。 它始终显示第一次设置的文本。 我尝试删除文件,甚至重新启动系统,但它没有帮助。 然后我重命名了文件(即exe文件),然后它正确显示了更改的文本 。 如果我将其重命名为原始名称,则会显示第一个设置文本。 可能是什么原因?

XAML:在设计时获取文件的相对路径

我正在构建一个Windows Phone 8应用程序。 在设计时,我加载一个示例XML文件以获取样本数据。 它运行良好但我想使用相对于解决方案根目录的文件路径,因此它可以适用于具有相同代码的所有开发人员。 这是我目前的代码: var path = @”C:\Users\Tom\MyProject\SampleData\stub.xml”; xml = new StreamReader(path).ReadToEnd(); 我尝试了一个像@“SampleData \ stub.xml”这样的相对路径。 它适用于手机但在设计时我收到此错误: DirectoryNotFoundException: Could not find a part of the path ‘C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\SampleData\login.xml’.

在特定的tresshold下调整wpf控件时不受欢迎的剪辑

在WPF中开发自定义控件时,我发现了一种奇怪的剪切行为。 当我在一定的最小边界/ tress-hold下调整控件的大小时,它决定剪切控件的前24个像素,原因我不明白。 如果有人能够解释如何在没有剪切行为的情况下实现所需的图形效果,将会非常感激。 使用以下XAML会发生此行为。 请注意,XAML是一个精简版,使其符合标准的.net 4.0控件。

在WPF ListView中如何防止自动滚动?

我有一个WPF ListView,每当我点击一个只能部分可见的项目时,它就会滚动。 如何让控件不将该项目滚动到视图中(而只是选择部分可见的项目)? 从此控件执行拖动时,此行为非常烦人。 谢谢。 补充:我正在寻找一种解决方案,以便在单击控件认为不完全可见的内容时保持控件本身不滚动。 通常这是几个像素,并且滚动不是必需的。

自定义控件中的依赖项属性意外地共享内存/值

我有以下设置: 自定义WPF控件(基类),派生自Canvas 该基类的实现 该实现的ObservableCollection依赖项属性 我有一个测试应用程序,显示我的自定义控件的三个唯一实例(例如 ,Test2,Test3等)。 当我运行并调试应用程序时, ObservableCollection的内容对于控件的所有三个实例都是相同的。 为什么是这样? 图表: [ContentProperty(“DataGroups”)] public abstract class Chart : Canvas { static Chart() { DefaultStyleKeyProperty.OverrideMetadata(typeof(Chart), new FrameworkPropertyMetadata(typeof(Chart))); } public ObservableCollection DataGroups { get { return (ObservableCollection)GetValue(DataGroupsProperty); } set { SetValue(DataGroupsProperty, value); } } public static readonly DependencyProperty DataGroupsProperty = DependencyProperty.Register(“DataGroups”, typeof(ObservableCollection), typeof(Chart), new FrameworkPropertyMetadata(new ObservableCollection(), FrameworkPropertyMetadataOptions.AffectsArrange)); public abstract […]

切换到WPF中的调度程序线程

这是本课题的后续行动。 我必须从不同的Thread更新ObservableCollection。 我尝试使用以下代码: Thread t = new Thread( ()=> { while(true) { if (ErrorDetection.ErrorDetectionIO.doErrorDetection() == 1) { dataLine = ErrorDetection.ErrorDetectionIO.getDataLine(); if (mainWindow != null) { ISynchronizeInvoke target = mainWindow; // mainWindow needs to be an WindowsForm? target.Invoke( (Action)(() => { mainWindow.setNewDataLine(dataLine); } ), null); } } } } ); t.IsBackground = true; t.Start(); ErrorDetectionIO.doErrorDetection()在c ++ […]

如何在WPF UserControl中显示动态文化格式化的数字

我想动态设置Number文本块的文化格式,其中包含传递给MyUserControl的文化和数字值。 MyCulture和Number值将传递给MyCustomControl,其格式为“en-GB”,“en-US”等。 我在asp.NET MVC中使用扩展方法做了类似的事情,但需要帮助如何在WPF中将它拼凑在一起。 示例MVC扩展方法 public static MvcHtmlString CulturedAmount(this decimal value, string format, string locale) { if (string.IsNullOrEmpty(locale)) locale = HttpContext.Current.Request.UserLanguages[0]; return MvcHtmlString.Create(value.ToString(format, CultureInfo.CreateSpecificCulture(locale))); } 窗口 //MyMoney is a decimal, MyCulture is a string (eg “en-US”) MyCustomControl //display this with specific culture

WPF VSTS应用程序挂在VS凭据提示上

我正在尝试编写一个使用Visual Studio Team Service(VSTS)API的应用程序来显示Visual Studio Online中的项目。 我有以下代码在控制台应用程序中完美运行: var connection = new VssConnection(new Uri(collectionUri), new VssClientCredentials()); using (var witClient = connection.GetClient()) { var wiql = new Wiql { Query = “SELECT [System.Id] FROM WorkItems WHERE State = ‘New'” }; var workItems = await witClient.QueryByWiqlAsync(wiql); } 在控制台应用程序中,我收到一个Visual Studio提示输入凭据,一切都很好。 但是,当我从WPF运行相同的代码时,我没有得到提示,并且应用程序似乎挂起了。 在允许它从按钮单击事件异步运行后,我在WPF应用程序中工作了一小段时间。 然后我做了一些更改,几小时后 – 我一直无法得到它。 我按照CTRL + Z的方式回到它工作的地步,但仍然没有。 我怀疑这与线程管理有关,我已经尝试了使用Dispatcher.Invoke并在Window_Loaded运行或将其连接到一个按钮所能想到的一切。 […]