Tag: wpf

WPF样式按钮MouseOver问题

我试图在一个按钮上做一个简单的鼠标hover效果,它确实在鼠标结束时改变颜色,但颜色立即改为默认按钮背景……我怎样才能覆盖这种行为? 这是我的代码: Style myBtnStyle = new Style(); Trigger bla = new Trigger() { Property = IsMouseOverProperty, Value = true }; bla.Setters.Add(new Setter(Control.BackgroundProperty, Brushes.Black)); myBtnStyle.Triggers.Add(bla); button2.Style = myBtnStyle;

在程序运行期间编译/执行XAML

我想创建一个WPF应用程序,它从数据库中检索XAML代码并显示检索到的代码。 让我们说数据库返回以下代码: 如何在运行时执行此代码(或者可能只是mainGrid的内容)?

如何通过XAML为Enum类型的子元素设置MenuItem的IsChecked属性?

我已使用此解决方案将MenuItem绑定到Enum。 枚举值显示正确,但我似乎无法为MenuItem的子项设置默认选中的值。 换句话说,我希望MenuItem默认选中其中一个子项(我正在使用的枚举值)。 我尝试了以下代码,使用了Style和触发的Setter: 枚举包含诸如ItemA之类的值,我还在Trigger Value属性中尝试了AnEnum.First或0 (如此AnEnum.First 回答的 ),但无济于事。 DataTrigger是否可取? 如果是这样,我怎么能在XAML中写出来? 或者我应该在ItemTemplate为MenuItem使用DataTemplate吗? 我也尝试使用SomeSetting.Items相关的方法摆弄代码隐藏,但大多数属性(如Current)都是只读的。 我知道你可以在代码隐藏中编写SomeSettingMenu.ItemsSource = Enum.GetValues(typeof(….)) ,但我又不知道如何以编程方式在MenuItem中选择一个Item。 我也试过这段代码,也不行: enums是我正在使用的不同程序集的命名空间。 任何想法将不胜感激,谢谢你提前!

System.Windows.Controls.TextBox句柄

我觉得我错过了一些非常明显的东西。 我知道表单通常有一个Handle属性,但我使用的是System.Windows.Controls.TextBox ,它没有Handle属性。 如何访问TextBox的句柄? 我注意到RichTextBox具有Handle属性,为什么不使用常规TextBox ?

如何禁用wpf webbrowser控件上的drop

如何禁用System.Windows.Controls.WebBrowser上的文件丢弃? 从文档中可以看出,默认情况下应禁用此行为,因为它是从UIElement.AllowDrop属性inheritance的。 但是dy默认我可以将文件拖放到WebBrowser控件上。 除此之外,我似乎无法禁用这种假设的非默认行为。 例如,如果我在XAML中将该属性的值显式设置为false ..和/或代码隐藏,即 webBrowser1.AllowDrop = false; 然后我仍然可以将文件拖放到控件上。 如何禁用此行为并消除其创建的安全风险?

不是.NET 4.0 TPL使APM,EAP和BackgroundWorker异步模式过时了吗?

我有2种C#WPF应用程序项目: 基于.NET 4.0,我无法迁移到.NET 4.5 基于.NET 4.0,我可以迁移到.NET 4.5 所有这些都应该产生2-10个长时间运行(天)进程,这些进程可以被用户取消和重新启动。 我有兴趣遵循最佳设计实践。 首先,现在,我有兴趣消除有关BackgroundWorker用法的歧义,但我希望,我的问题应该对其他异步模式有效。 我看到(矛盾)并发的观点 异步编程模型(APM) 基于事件的异步模式(EAP) 的BackgroundWorker 异步模式: A).NET 4.5使它们过时了 在约瑟夫·阿尔巴哈里的书中,Ben Albahari在“ 过时模式 ”子章节中的“C#5.0 in a Nutshell:The Definitive Reference”中提到了这一点,而其上一版“C#4.0 in a Nutshell:The Definitive Reference”中没有 MSDN文章“使用异步和等待的异步编程(C#和Visual Basic)”告诉: “基于异步的异步编程方法几乎在所有情况下都优于现有方法。特别是,对于IO绑定操作,这种方法优于BackgroundWorker ,因为代码更简单,您无需防范竞争条件。与Task.Run结合使用,异步编程优于BackgroundWorker用于CPU绑定操作,因为异步编程将运行代码的协调细节与Task.Run传输到线程池的工作分开“ B)他们(或者至少是BackgroundWorker )在.NET 4.5中并没有过时 我仍有疑问: 这些模式(首先是BGW)在.NET 4.5中是否已过时? 如果它们在.NET 4.5中已经过时,为什么它们在.NET 4.0中不会过时? 2A)我是否错误地理解.NET 4.0新function在.NET 4.0中仍然“易于”实现/重现?

布尔到可见性转换器

我该怎么做这样的事情 有没有办法使用布尔到vis转换器,但没有在C中编写一个完整的方法来反转? 或者我应该让这些图像重叠并在需要时隐藏一个?

在WPF中对DataGrid进行TwoWay绑定

我有一个我正在使用的WPF DataGrid var allLines = from Lines in ctx.InvoiceLines join PerPs in ctx.ProductsViews on Lines.ProductCode equals PerPs.ProductCode where (Lines.BranchNo == BrNo) && (Lines.Docket == Docket) select new { Lines.ProductCode, Lines.Description, Lines.Inv_Quantity, Lines.Grn_Quantity, Lines.Inv_Price,Lines.Grn_Price,Lines.Inv_Total, Lines.Grn_Total, Lines.AnalCode, Lines.Vat_Rate, Lines.GrnNo,Lines.Comment , PerPs.OuterUnits}; dgGrid.ItemsSource = allLines; 我希望在更改任何值或添加新行时使用双向绑定来更新数据库。 那可能吗? 我的xaml代码是 当我运行此代码时,除了PerP列之外的所有代码都是空的。 我很失落如何做到最好的方式,所以任何帮助将非常感激。

在WPF C#中绑定可见性转换器

我有一个类型集合的依赖属性,当它的回调基于我需要设置屏幕上某些控件的可见性的计数触发时。 但控制仍然一直在崩溃。 根据代码,一个控件始终可见。 XAML绑定是 我的两个属性是 public bool CountLabelVisible { get; set; } public bool CountLabelVisibleReverse { get; set; } 依赖属性回调 private static void ItemsCollectionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs eventArgs) { var listingUserControl = (obj as ListingUserControl); var itemsResult = (eventArgs.NewValue as List); if (listingUserControl != null && itemsResult != null) { listingUserControl.CountLabelVisible = itemsResult.Count > 0; listingUserControl.CountLabelVisibleReverse […]

WPF进度条

在我的WPF应用程序中,我必须在计时器刻度事件中显示进度条进度,我写的如下, System.Windows.Forms.Timer timer; public MainWindow() { timer = new System.Windows.Forms.Timer(); timer.Interval = 1000; this.timer.Tick += new System.EventHandler(this.timer_Tick); } 加载事件如下 private void Window_Loaded(object sender, RoutedEventArgs e) { progressBar1.Minimum = 0; progressBar1.Value = DateTime.Now.Second; progressBar1.Maximum = 700; timer.Start(); } 最后在tick事件中, private void timer_Tick(object sender, EventArgs e) { Duration duration = new Duration(TimeSpan.FromSeconds(20)); //progress bar animation System.Windows.Media.Animation.DoubleAnimation doubleanimation […]