Articles of wpf

打包url和unit testing。 我的环境有问题吗?

所以我有一个很好的小MVVM解决方案,而且工作得很好。 我有一个标题栏的视图模型,根据应用程序的状态调整图标等。我已经完成验收测试,视图模型工作得很好。 所以我想对这个视图模型的行为进行unit testing 。 我创建了我的unit testing项目,为视图模型添加了一个新的unit testing,并编写了一个简单的冒烟测试。 (即给定模拟依赖项,类将实例化)。 巴姆,不 但是,正常运行时该类工作正常。 经过进一步检查,我的错误如下: TestInitialize threw exception: System.UriFormatException: Invalid URI: Invalid port specified. 因此,在调用堆栈之后,我得出的结论是,用于加载资源流的包URL是踢错误的。 pack://application:,,,/Operations.Shell;component/Media/Images/User_Normal.png (注意: Operations.Shell是程序集名称,/ /Media/Images/User_Normal.png / /Media/Images/User_Normal.png / /Media/Images/User_Normal.png是图像路径/名称,此包URL在实践中有效。) 我的User_Normal.png包含的URL是否存在,文件是否存在,资源是否已正确打包到程序集中(使用reflection器检查)。 问题来自System.Uri类无法解释包URL。 这是我迷路的地方 。 为什么这不适用于测试范围。 我在我的测试项目中引用了所有WPF程序集: WindowsBase PresentationCore PresentationFramework System.Xaml 我错过了什么? 更新 好吧原来的问题是UriHandler没有注册包url。 (感谢Julien Lebosquain)现在已经修复了它仍然存在问题。 TestInitialize threw exception: System.NotSupportedException: The URI prefix is not recognized. […]

在XAML中使用在Silverlight中的代码中创建的静态对象

我无法在Silverlight中使用它,所以我创建了两个测试项目。 一个简单的WPF项目和一个简单的Silverlight项目,它们只做一件事:在代码中设置一个公共静态只读变量,并在一个完全裸的XAML中使用它。 在WPF中,工作顺利。 在Silverlight中,我收到以下编译器警告和运行时错误: 警告2 XML名称空间“ http://schemas.microsoft.com/winfx/2006/xaml ”中不存在“静态”标记… 和 属性Text的属性值{x:Static SilverlightApplication3:Page.Test}无效。 [线路:7位置:25] 我假设Silverlight 2不支持这个,或者我只是遗漏了一些非常简单的东西? 这是两者的完整代码,以防万一是后者: public partial class Window1 : Window { public static readonly string Test = “test”; public Window1() { InitializeComponent(); } } 这是SL版本: public partial class Page : UserControl { public static readonly string Test = “test”; public Page() { InitializeComponent(); } […]

让我的wpf应用程序全屏(封面任务栏和窗口标题栏)

我想让我的应用程序可以最大化到全屏幕意味着它也隐藏了Windows任务栏和标题栏。 它应该由一个按钮触发。 我正在尝试像这样开发我的应用程序窗口。 在下面添加我的代码段

wpf图像资源并在运行时在wpf控件中更改图像

我想知道如何在后面的C#代码中动态使用字典资源 – 即..我想在运行时从字典中的图像资源加载图像 我有一个程序在WPF字典中有3个图像 – 这些是设置为图像资源的图像。 然后在我的WPF窗口后面的代码中,我想根据用户发起的事件加载三个图像中的任何一个。 没有真正的代码我必须展示,因为我没有做过任何工作。 想法?

如何在WPF中使用一次性视图模型?

如果视图模型引用非托管资源或者在调度程序计时器上有事件处理程序(如处理已经过时),我该如何确保它们得到妥善处理。 在第一种情况下,终结者是一种选择,虽然不是理想的,但在后者中,它永远不会被称为。 如何在视图模型中不再附加视图时如何判断。

WPF Canvas Scaling / Transform to Fit

我正在重新提出这个问题,因为我上次没有得到很多答复,希望一些重新措辞可能会有所帮助…… 基本上我正在尝试做的是创建一个数据绑定canvas,它将自动缩放其内容以“填充”可用空间。 有点像缩放以适应操作。 不幸的是,我的WPF技能还不是很强,我正在努力研究如何做到这一点。 我已经按照一些数据绑定示例来获取canvas,但不确定是否可能是错误并阻碍了我。 根据我尝试和解决方案的方式,我现在有两个基本问题: 如果可能使用转换,我不知道如何通过XAML自动重新缩放canvas。 我似乎无法在后面的代码中引用canvas,我猜是因为它是ItemsControl的一部分? 我想要实现的一个例子,我有AI想要尝试获得B: ( 删除过期链接到img ) 我目前使用的代码非常简单,只需使用给定的坐标创建4个点,然后使用另一个视图模型将其包装起来。 public class PointCollectionViewModel { private List viewModels; public PointCollectionViewModel() { this.viewModels = new List(); this.viewModels.Add(new PointViewModel(new Point(1, 1))); this.viewModels.Add(new PointViewModel(new Point(9, 9))); this.viewModels.Add(new PointViewModel(new Point(1, 9))); this.viewModels.Add(new PointViewModel(new Point(9, 1))); } public List Models { get { return this.viewModels; } } } […]

创建自定义wpf事件

我创建了一个UserControl for Database连接,用户输入连接的用户名和密码。 此UserControl位于MainWindow.xaml中 现在,在我的UserControl后面的代码中,我创建了一个MSSQL连接。 如果登录成功,我想提升自定义事件以在MainWindow中公开。 例如,在MyUserControl.xaml.cs中 try { using (SqlConnection sqlConn = new SqlConnection(connection)) { sqlConn.Open(); MessageBox.Show(“Connessione Riuscita!”, “Connessione a ” + TextIP.Text, MessageBoxButton.OK, MessageBoxImage.Information); RaiseMyEvent(); sqlConn.Close(); } } catch (SqlException ex) { MessageBox.Show(“Connessione Fallita: ” + ex.Message, “Connessione a ” + TextIP.Text, MessageBoxButton.OK, MessageBoxImage.Error); } 在MainWindow.xaml我想使用mypersonalized事件: 我需要这个用于多种类型的连接(MSSQL,Oracle,MySql等)。 怎么弄这个?

在代码中设置静态资源

我的App.xaml文件中有几个样式: 我想在mainpage.xaml.cs的代码中更改BackgroundProperty 。 我试过用这个: Style style = Application.Current.Resources[“stackpanelBackground”] as Style; style.Setters.SetValue(StackPanel.BackgroundProperty, “{StaticResource styleRed}”); 但我遇到了灾难性的失败exception。 我认为它与{StaticResource styleRed} 。 有一个更好的方法吗?

在运行时切换wpf资源字典

我正在尝试构建一个允许用户在运行时更改主题的wpf应用程序。 到目前为止我所做的是创建一个resourcedictionary,其中包含在其中定义的应用程序的所有颜色,然后我绑定到xaml中的这个字典。 下面是我切换资源字典的代码: if (System.IO.File.Exists(fileName)) { using (FileStream fs = new FileStream(fileName, FileMode.Open)) { ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(fs); Resources.MergedDictionaries.Clear(); Resources.MergedDictionaries.Add(dic); } } 这段代码运行正常,我知道它正在切换资源字典,但它不会更新已经显示在屏幕上的元素。 我的问题是:我如何刷新或重新绑定屏幕以考虑新的资源字典? 谢谢 SM

为什么WPF不在Windows 8中显示Windows 8样式按钮

这是一个Windows 8风格的按钮: 这是.NET 4.5 WPF应用程序中的一个按钮: 任何想法为什么WPF不显示本机Windows 8样式按钮? 有没有办法来解决这个问题?