Tag: wpf

绑定附属物

我正在尝试将Button的ContentTemplate绑定到附加属性。 我读了所有问题的答案,类似于“绑定到附属物”,但我没有运气解决问题。 请注意,此处提供的示例是我的问题的一个愚蠢版本,以避免混淆业务代码的问题。 所以,我确实有附加属性的静态类: using System.Windows; namespace AttachedPropertyTest { public static class Extender { public static readonly DependencyProperty AttachedTextProperty = DependencyProperty.RegisterAttached( “AttachedText”, typeof(string), typeof(DependencyObject), new PropertyMetadata(string.Empty)); public static void SetAttachedText(DependencyObject obj, string value) { obj.SetValue(AttachedTextProperty, value); } public static string GetAttachedText(DependencyObject obj) { return (string)obj.GetValue(AttachedTextProperty); } } } 和一个窗口: 这就是它。 我希望在按钮中间看到“附加”。 相反,它崩溃: 属性路径无效。 ‘Extender’没有名为’AttachedText’的公共属性。 我在SetAttachedText和GetAttachedText上设置断点,并执行SetAttachedText,因此将其附加到按钮可以正常工作。 […]

为什么你可以在WinForms中交叉线程添加控件,而不是WPF?

在虚拟WinForms应用程序中,我能够在设计时创建ListBox,在运行时创建后台线程,然后从后台线程向ListBox添加控件。 但如果我在WPF中做同样的事情,我会收到错误。 为什么我能在WinForms中执行此操作,但不能在WPF中执行此操作? 我的WinForm示例与WPF示例不一样吗? 或者确实有一个理由说它在WinForms中工作得很好而不是WPF? 的WinForms: private List _labels; public Form1() { InitializeComponent(); Thread test = new Thread(DoStuff); test.SetApartmentState(ApartmentState.STA); test.Start(); } private void DoStuff() { _labels = new List(); _labels.Add(new Label() { Text = “Label1” }); _labels.Add(new Label() { Text = “Label2” }); _labels.Add(new Label() { Text = “Label3” }); if (listBox1.InvokeRequired) { listBox1.Invoke((MethodInvoker)delegate { […]

如何在不违反MVVM的情况下绑定到不可绑定的属性?

我使用SharpVector的SvgViewBox来显示这样的静态资源图像: 哪个工作正常。 但是,我希望通过绑定到视图模型来控制显示的图像。 我遇到的问题是SvgViewbox的Source属性不可绑定。 如何在不违反MVVM的情况下解决此限制(例如,将控件传递给视图模型并在其中进行修改)?

WPF DataBinding监视抛出的exception

在我的模型中,我有很多不同对象的属性,我在设置对象的值时检查值,如果值不被接受,我将抛出一个exception,这与Windows窗体属性网格完美配合,但现在我正在尝试使用WPF设计新界面。 在WPF中,当我将属性绑定到像文本框这样的控件时,当值更改时,我不知道如何处理exception并显示错误消息。 例子: public string ConnectionString { get { return (_ConnectionString); } set { try { _ConnectionString = value ; _SqlConnection = new System.Data.SqlClient.SqlConnection(_ConnectionString); _ConnectionTested = true; } catch (Exception caught) { _ConnectionTested = false; _TableNameTested = false; _FieldNameTested = false; _ConditionTested = false; _ConnectionString = “”; //—-delete values—- ValuesCollection.Clear(); throw (new Exception(“Can not Open […]

在async / await中重入?

我有一个按钮,它有一个async处理程序,它在异步方法上调用等待。 这是它的样子: private async void Button1_OnClick(object sender, RoutedEventArgs e) { await IpChangedReactor.UpdateIps(); } 以下是IpChangedReactor.UpdateIps()外观: public async Task UpdateIps() { await UpdateCurrentIp(); await UpdateUserIps(); } 它一直是异步的。 现在我有一个DispatcherTimer ,它在tick事件中重复调用await IpChangedReactor.UpdateIps 。 假设我点击了按钮。 现在事件处理程序在UpdateIps上UpdateIps并返回到调用者,这意味着WPF将继续执行其他操作。 在此期间,如果计时器被触发,它将再次调用UpdateIps ,现在两个方法将同时运行。 所以我看到的方式是它类似于使用2个线程。 竞争条件会发生吗? (我的一部分说不,因为它都在同一个线程中运行。但它令人困惑) 我知道异步方法不一定在单独的线程上运行。 但是,在这种情况下,它非常令人困惑。 如果我在这里使用同步方法,它将按预期工作。 计时器滴答事件将仅在第一次呼叫完成后运行。 有人可以开导我吗?

定时器回调关闭WPF应用程序(DispatcherTimer工作..)

我有一个带有显示当前时间的文本块的WPF应用程序。 所述文本块绑定到ViewModel上的DependencyProperty。 当然我需要不断更新时间,所以我使用了一个定时器(System.Threading.Timer),如下所示: public MainViewModel() { _dateTimer = new Timer(_dateTimer_Tick, null, 0, 60000); } void _dateTimer_Tick(object sender) { Time = DateTime.Now.ToString(“HH:mm”); Date = DateTime.Now.ToString(“D”); } 问题是,当调用回调时,应用程序退出… bummer(输出说:“在WindowsBase.dll中发生类型’System.InvalidOperationException’的第一次机会exception”就在它即将写入Time DP时) 。 如果我使用DispatcherTimer一切正常。 我不介意使用DispatcherTimer,它只是应用程序非常大,我想尽可能地调整其性能。 据我所知,我没有访问UI线程(我只是更新属性),因此不需要DispatcherTimer。 我错过了什么吗? 谢谢。 编辑:属性定义如下: public string Time { get { return (string)GetValue(TimeProperty); } set { SetValue(TimeProperty, value); } } // Using a DependencyProperty as […]

多个ComboBox绑定到公共源,强制执行不同的选择

我正在尝试将多个ComboBox绑定到一个公共源集合,并强制执行一次ComboBox选择后,所选项目将从其他ComboBox中删除。 该集合是动态构建的,所以我在代码中进行。 到目前为止,我已尝试以多种方式实现这一点,而我似乎无法想出一些真正有用的东西。 我已经尝试使用默认视图的Filter谓词,但它只传递了该项,我无法知道哪个控件正在进行过滤(它在概念上甚至没有意义)。 我已经尝试创建新的CollectionView,但行为最终会有所不同(获取SelectionChange事件,而我之前没有使用默认视图)。 几个小时以来我一直在反对这个问题,而且似乎并不想工作。 我希望有更多经验丰富的WPF帮助我找到一个有效的例子。 我真的希望它不会从集合中自动选择项目并开始空白(否则,每个ComboBox将有一个独特的自动选择,这太过于冒昧)。 我真的很接近允许广泛选择并在以后validation它,但这似乎是一个如此简单的概念,有这么难以置信的困难。 谢谢

消息框按钮文本

我环顾四周,似乎一切都可以在MessageBox中编辑,禁止按钮上的文字( WPF / C#) MessageBox.Show(“Generic Message”, “Caption”, MessageBoxButton.YesNoCancel, MessageBoxImage.Warning) 有没有办法更改“是”,“否”,“取消”文本或我是否需要编写一个窗口来充当消息框来完成此任务? (这样做没有任何问题;我只是想知道WPF中是否有办法。)

绑定ComboBox ItemsSource在WPF中不起作用

这有点奇怪,因为我在那里发现的每个例子都说我正在以正确的方式做事但我无法让我的ComboBox绑定在WPF中工作。 我刚刚创建了一个空的WPF应用程序。 public List myCollection { get; set; } public MainWindow() { DataContext = this; InitializeComponent(); myCollection = new List {“test1”, “test2”, “test3”, “test4”}; } 这是我的xaml: 我试过Binding myCollection,Binding Path = myCollection,我尝试过设置DataContext和不设置DataContext。 似乎没有什么工作。 我已经没有想法了,我发现的每个例子都说这是正确的方法,它应该工作,所以感谢任何帮助我推进。

C#WCF客户端XP上的内存泄漏

我有个问题。 我编写了一个使用wsHttpBinding的wcf客户端(WPF和c#)。 我正在使用双工。 我有一个函数,我每分钟调用一次名为KeepConnection的wcf服务。 我永远不会关闭客户端代理,因为我需要让客户端“在线”始终进行服务回调。 但是当在Windows XP上运行这个客户端时,我的应用程序的内存有一个奇怪的问题。当在win 7 / vista上正常运行时,应用程序在taskmanger中只使用40mb的内存。 在Xp中每秒不断增加内存的使用。 我在2天内超过700mb。 有没有办法解决这个问题或与XP有关。 感谢帮助。 服务代码: /// /// Just an empty method for client to keep the connection alive with the service. /// public void KeepConnection() { _logger.Debug(“Keep alive requested.”); } 我的客户代码。 private InstanceContext instanceContext; //Wcf instance context for callbacks. public static BootDialog _bootScreen = new […]