Tag: wpf

将可见性属性绑定到变量

我在Window内有一个带Label的Border , 我还有一个Variable : public bool vis = false; 如何将vis变量与边界Visibility属性绑定?

从WinForms表单显示WPF窗口绝对安全吗?

我想从Windows窗体应用程序(.NET 3.5)中显示一个WPF窗口。 此代码似乎在示例项目中没有任何问题: public partial class WinFormsForm1 : Form { public WinFormsForm1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { WpfWindow1 w = new WpfWindow1(); w.Show(); } } 表单从Main()作为常规Winforms表单启动: Application.Run(new WinFormsForm1()); 在我看来这太容易成为现实。 这有什么缺点吗? 这样做安全吗?

为什么不能从不同的线程更新ObservableCollection?

在multithreadingWPF应用程序中, 无法从WPF窗口线程以外的线程更新ObservableCollection 。 我知道有解决方法 ,所以我的问题不是如何避免“ 这种类型的CollectionView不支持从不同于Dispatcher线程的线程更改其SourceCollection ”exception。 我的问题是, 为什么有这样的例外? 为什么不允许从任何线程进行集合更新? 就个人而言,当ObservableCollection从其他线程更改时,我认为没有任何理由阻止UI更新。 如果两个线程(包括并行线程)访问同一个对象,一个通过事件监听对象属性的更改,另一个执行更改,它将始终有效,至少在正确使用锁定的情况下。 那么,原因是什么?

如何使用WPF从bindingexpression解析绑定对象?

嗨有没有人知道是否有任何内置的类来解决绑定对象的绑定对象及它的DataItem和属性路径? 我正在尝试为文本框编写Blend 3行为,该行为会自动调用绑定到文本框Text属性的对象上的方法。 文本框绑定到viewmodel类的属性。 我想要做的是从绑定表达式解析viewmodel类,然后对此进行调用。 我首先从行为的关联对象中检索绑定表达式,如下所示: private BindingExpression GetTextBinding() { return this.AssociatedObject.GetBindingExpression(TextBox.TextProperty); } 完成此操作后,如果我们查看绑定表达式,我们可以看到它通过绑定表达式的DataItem属性引用了数据上下文。 另外,我们有绑定表达式父绑定绑定的属性的相对路径。 所以,我们可以得到这些信息: var bindingExpression = GetTextBinding(); object dataContextItem = bindingExpression.DataItem; PropertyPath relativePropertyPath = bindingExpression.ParentBinding.Path; 现在,这个属性路径可能是一个深度嵌套和复杂的路径,我非常希望避免(重新)实现解析。 我已经搜索了.NET文档并用reflection器围绕组件弹跳,但都无济于事 – 我找不到肯定必须存在的东西 – 必须有一些类来执行数据项目的路径解析(数据上下文)。 有谁知道这可能存在的地方? 有关解决绑定对象的替代方法的任何建议吗? 注意,我正在尝试获取绑定对象的父对象绑定属性(在这种情况下为字符串) – 我显然可以轻松获得绑定值,但它是我需要的父级。 在此先感谢您的帮助! 菲尔

数学问题:根据外角半径/厚度确定内边框的圆角半径

这是数学高手的数学/几何问题(不是我最强的主题)。 这适用于WPF,但应该足够通用,无论如何: 我有两个嵌入的边框元素,外边框有一定的角半径, R和边框厚度T 给定这两个值,内边框的角半径R’应该设置为使得两个角边不相交或没有孔? alt text http://sofzh.miximages.com/c%23/2z5t3qs.png 到目前为止,我一直在关注它,但如果有人能给我一个合适的配方,那将是伟大的。 尊重点,如果你能! ;)

什么不能在此时修改此节点的逻辑子节点,因为树步行正在进行中?

我在后台工作线程的已完成方法中设置对象的DataContext。 出于某种原因,我收到一个错误说: 此时无法修改此节点的逻辑子节点,因为正在进行树步行指向Chart1.DataContext = allDates行。 树木行走的意义何在? 我已经尝试使用Dispatcher操作执行此设置,并且出现相同的错误…任何想法? 谷歌在此错误消息上没有任何结果。 代码导致这是微软Charting工具包的内部……我想知道我是否在他们的控制中发现了一个错误… 没有Dispatcher: void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { ArticlesPerTimePeriodResult result = (ArticlesPerTimePeriodResult)e.Result; lvArticles.ItemsSource = result.DatesOfArticles; Chart1.DataContext = result.AllDates; } 使用Dispatcher: void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { ArticlesPerTimePeriodResult result = (ArticlesPerTimePeriodResult)e.Result; lvArticles.ItemsSource = result.DatesOfArticles; Dispatcher.BeginInvoke((Action<List<KeyValuePair>>)(delegate(List<KeyValuePair> allDates) { Chart1.DataContext = allDates; }), result.AllDates); //Chart1.DataContext = result.AllDates; } 错误: System.Reflection.TargetInvocationException […]

WPF按钮单击C#代码

我有一个按钮数组,它在运行时动态生成。 我在我的代码中有按钮单击function,但我找不到在代码中设置按钮的单击名称的方法。 所以, 什么是XAML的等效代码: 或者,我应该为“????”放置什么 在以下代码中: Button btn = new Button() btn.Name = “btn1”; btn.???? = “btn1_Click”;

Thread.CurrentPrincipal.Identity.Name从WPF为空

编辑 简单的问题是,如何让Thread.CurrentPrincipal.Identity.Name在WPF中拥有当前用户登录? 结束编辑 我正在尝试调用现有方法(不是在任何类型的服务中;只是POCO中的方法),它使用以下方法检索当前用户: Thread.CurrentPrincipal.Identity.Name 这段代码是由其他人编写的,并且(可能)与他的ASP.NET MVC项目一起工作。 我试图从WPF调用相同的方法,而Name现在是空白的。 我能做些什么吗?

如何更新进度条以使其顺利增加?

我正在使用WPF(C#)的进度条来描述进程的进度。 我的算法如下: DoSomethingCode1(); ProgressBar.SetPercent(10); // 10% DoSomethingCode2(); ProgressBar.SetPercent(20); // 20% … DoSomethingCode10(); ProgressBar.SetPercent(100); // 100% 没关系,但它会使进度条不连续。 有人可以告诉我一些让进度条轻柔更新的建议吗?

WPF MVVM:将不同的ViewModel绑定到每个TabItem?

我有一个主窗口,其中包含一个包含2个tabItem的选项卡控件: 我目前有一个ViewModel ,它为Tab1和Tab2提供服务。 这个ViewModel变得有点臃肿,SOC模糊。 我想将逻辑拆分为2个视图模型:ViewModel 1和ViewModel2。 我的理解是你可以将主窗口DataContext设置为一个包含ViewModel集合的Base ViewModel,然后你可以将每个TabItem断言为另一个ViewModel。 我见过的这些基本ViewModel示例公开了一个ObservableCOllection,如下所示: private ObservableCollection _viewModelCollection Public Observable Collection ViewModelCollection { get { return _viewModelCollection; } set { _viewModelCollection = value; OnPropertyChanged(“ViewModelCollection”); } } public BaseViewModel() { ViewModelCollection = new ObservableCollection(); ViewModelCollection.Add(new ViewModel1(Tab1); ViewModelCollection.Add(new ViewModel1(Tab2); } 但是如何为每个TabItem分配不同的ViewModel? 我想要Tab1 = ViewModel1&Tab2 = ViewModel2?