Tag: wpf

如何处理跨线程访问exception?

在WPF中使用multithreading时可以得到一个常见的exception: 调用线程不能访问这个对象,因为不同的线程拥有它 有什么方法可以正确处理这个问题?

WPF图像资源

我主要来自网页和Windows窗体背景。 对于一个新项目,我们将使用WPF。 为了便于说明,WPF应用程序需要10 – 20个小图标和图像。 我正在考虑将这些作为嵌入式资源存储在程序集中。 这是正确的路吗? 如何在XAML中指定Image控件应该从嵌入资源加载图像?

如何将WPF DataGrid绑定到可变数量的列?

我的WPF应用程序会生成一组数据,每次可能有不同数量的列。 在输出中包含将用于应用格式的每一列的描述。 输出的简化版本可能是这样的: class Data { IList<ColumnDescription> ColumnDescriptions { get; set; } string[][] Rows { get; set; } } 这个类被设置为WPF DataGrid上的DataContext,但我实际上是以编程方式创建列: for (int i = 0; i < data.ColumnDescriptions.Count; i++) { dataGrid.Columns.Add(new DataGridTextColumn { Header = data.ColumnDescriptions[i].Name, Binding = new Binding(string.Format("[{0}]", i)) }); } 有没有办法用XAML文件中的数据绑定代替这个代码?

WPF中现有控件的控件模板

如何在WPF中以XAML格式(可视化树)获取现有控件的控件模板? 这有助于在现有模板的帮助下创建新的控制模板。

从视图模型(C#)设置WPF中的文本框焦点

我在我的视图中有一个TextBox和一个Button 。 现在我正在检查按钮单击条件,如果条件结果是false,显示消息给用户,然后我必须将光标设置到TextBox控件。 if (companyref == null) { var cs = new Lipper.Nelson.AdminClient.Main.Views.ContactPanels.CompanyAssociation(); MessageBox.Show("Company does not exist.", "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); cs.txtCompanyID.Focusable = true; System.Windows.Input.Keyboard.Focus(cs.txtCompanyID); } 上面的代码在ViewModel中。 CompanyAssociation是视图名称。 但是光标没有在TextBox设置。 xaml是: <igEditors:XamTextEditor Name="txtCompanyID" KeyDown="xamTextEditorAllowOnlyNumeric_KeyDown" ValueChanged="txtCompanyID_ValueChanged" Text="{Binding Company.CompanyId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="{Binding ActualWidth, ElementName=border}" Grid.Column="1" Grid.Row="0" VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="0,5,0,0" IsEnabled="{Binding Path=IsEditable}"/> <Button Template="{StaticResource buttonTemp1}" Command="{Binding ContactCommand}" CommandParameter="searchCompany" Content="Search" Width="80" […]

数据绑定到WPF Treeview中的SelectedItem

我怎样才能检索在WPF树视图中选择的项目? 我想在XAML中这样做,因为我想绑定它。 你可能会认为它是SelectedItem但显然不存在是只读的,因此不可用。 这是我想要做的: <TreeView ItemsSource="{Binding Path=Model.Clusters}" ItemTemplate="{StaticResource ClusterTemplate}" SelectedItem="{Binding Path=Model.SelectedCluster}" /> 我想将SelectedItem绑定到我的模型上的一个属性。 但是这给了我错误: “SelectedItem”属性是只读的,不能从标记中设置。 编辑:好的,这是我解决这个问题的方法: <TreeView ItemsSource="{Binding Path=Model.Clusters}" ItemTemplate="{StaticResource HoofdCLusterTemplate}" SelectedItemChanged="TreeView_OnSelectedItemChanged" /> 并在我的xaml的codebehind文件中: private void TreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) { Model.SelectedCluster = (Cluster)e.NewValue; }

如何使用.NET从十六进制颜色代码中获取颜色?

我如何从十六进制颜色代码(例如#FFDFD991 )获取颜色? 我正在阅读一个文件,并得到一个十六进制颜色代码。 我需要为十六进制颜色代码创建相应的System.Windows.Media.Color实例。 在框架中是否有一个内置的方法来做到这一点?

WPF全局异常处理程序

有时,在不可重现的情况下,我的WPF应用程序崩溃,没有任何消息。 应用程序只需立即关闭。 哪里是最好的地方来实现全球Try / Catch块。 至少我必须实现一个消息框:“抱歉造成不便…”

ViewModel应该如何关闭表单?

我试图学习WPF和MVVM的问题,但遇到了一个麻烦。 这个问题是相似的,但不完全相同,这个(处理对话框在WPF,与mvvm) … 我有一个使用MVVM模式编写的“登录”表单。 这个表单有一个ViewModel,它保存着用户名和密码,这些用户名和密码被绑定到XAML中使用普通数据绑定的视图。 它还有一个“登录”命令,绑定到表单上的“登录”按钮,使用普通的数据绑定。 当“Login”命令触发时,它调用ViewModel中的一个函数,该函数关闭并通过网络发送数据以进行登录。当此函数完成时,有两个操作: 登录无效 – 我们只是显示一个MessageBox,一切正常 登录是有效的,我们需要关闭登录表单,并返回true作为其DialogResult … 问题是,ViewModel对实际的视图一无所知,所以怎么关闭视图并告诉它返回一个特定的DialogResult? 我可以在CodeBehind中粘贴一些代码,并且/或者将视图传递给ViewModel,但是这看起来好像会彻底击败MVVM的全部… 更新 最后,我刚刚违反了MVVM模式的“纯度”,并让View发布了一个Closed事件,并公开了一个Close方法。 ViewModel然后会调用view.Close 。 该视图只有通过一个接口才知道,并通过一个IOC容器连接起来,所以没有可测试性或可维护性的损失。 接受的答案是-5票,这似乎相当愚蠢! 虽然我很清楚自己在“纯”的时候解决问题的好感,但我并不是唯一一个认为200行事件,命令和行为只是为了避免单行“模式”和“纯度”的名字有点荒谬….

创建计划任务

我目前正在处理一个C#WPF项目。 我需要允许用户创建并将计划任务添加到Windows任务计划程序。 我怎么能做到这一点,并使用指令和参考,我需要什么,因为我没有找到很多时,搜索互联网。