Tag: wpf

如何在创建新视图时初始化视图模型中的属性?

我有一个应用程序打开一个允许您搜索数据的视图。 但是,为了进行搜索,用户必须选择他想要搜索的类别。 目前,我正在试图弄清楚如何将所选类别从主视图模型(作为int)传递到新搜索视图的视图模型。 目前我正在尝试在主视图中使用这样的东西: 假设我有两个视图View1和View2各自的视图模型。 View2ViewlModel看起来像这样: public class View2ViewlModel : ViewModelBase { private IDataService _dataService; public int DivisionIdnt {get; set;} public View2ViewModel(IDataService dataService) { _dataService = dataService; } } 在View1我们在收到消息时创建并打开View2 。 public View2() { InitializeComponent(); Messenger.Default.Register<NotificationMessage>(this, (m) => NotificationMesageReceived(m, m.Content)); } private void NotificationMesageReceived(NotificationMessage msg, int divisionIdnt) { if (msg.Notification == “SearchCred”) { var findCredentialView […]

确定WPF是否可以加载图像文件的最佳方法是什么?

有没有办法确定WPF是否能够加载图像文件而不尝试构造BitmapImage并在失败时捕获exception? 我正在创建一个图像浏览器,试图显示可移动驱动器上所有图像的预览。 可能有很多文件不是​​图像,并且每个文件都捕获exception似乎效率低下但是我想不出一种不容易出错的方法。 有什么建议? 谢谢,马克

在ScrollViewer.ComputedVerticalScrollBarVisibility更改上调整listview列的大小

我使用星型转换器来获得相对大小的listview列 ,但我目前的问题是,如果滚动条可见或不可见,则不会考虑这一点。 我试着在代码中添加如下内容: var scroll = FindVisualChild(listView); var offset = 0.0; if (scroll.ComputedVerticalScrollBarVisibility == Visibility.Visible) offset = SystemParameters.ScrollWidth + 5; 但是,大小调整是在滚动条可见性之前完成的,并且滚动始终显示为“ Collapsed 。 所以,我的问题是,如何适当调整列的大小。 我试图在ScrollViewer.ComputedVerticalScrollBarVisibility上添加一个触发器,但在那里没有取得任何成功。 我尝试使用基于此链接的自定义代码 ,但目前总是以空白列表视图结束(可能是由于使用ItemsPresenter的listview,但我目前不确定)。 这是我尝试过的listview设置: 安装者只是为了看它是否有效……但它们根本就没有设置

在ContextMenu中使用MahApps图标

我正在使用MahApps Metro UI工具包编写WPF应用程序。 http://mahapps.com/guides/quick-start.html 从他们网站上的指南,我基本完成了我的应用程序,它看起来很光滑。 我唯一的问题是我无法找到如何使用他们提供的图标包作为contextmenu图标。 这是我正在尝试做的一个直观的例子。 虽然我能够获得原始的“Windows”菜单项来显示它的图标,但我无法对上下文菜单项执行相同的操作。 有什么我做错了或解决这个问题的方法吗? 这是我的.xaml: 我的.xaml.cs: public partial class MainWindow { public MainWindow() { InitializeComponent(); DataContext = new MainWindowViewModel(); } private void WindowsMenuItem_Click(object sender, RoutedEventArgs e) { (sender as MenuItem).ContextMenu.IsEnabled = true; (sender as MenuItem).ContextMenu.PlacementTarget = (sender as MenuItem); (sender as MenuItem).ContextMenu.Placement = System.Windows.Controls.Primitives.PlacementMode.Bottom; (sender as MenuItem).ContextMenu.IsOpen = true; } […]

使用OpenGL-Control的WPF MVVM WinformsHost

我正在使用MVVM开发WPF应用程序。 在这个应用程序中,我需要一个OpenGL控件(我正在使用OpenTK)。 目前在WPF中获取OpenGL的唯一有用方法是使用WindowsFormsHost。 直到这里,没有问题。 要向我的场景添加内容,我需要在我的视图中访问OpenGL-Control。 当然,我想在ViewModel中添加和编辑内容。 那么,如何在不违反MVVM模式的情况下访问OpenGL-Control? 我正在使用一个可以在View中初始化的场景对象,然后需要以某种方式转移到ViewModel。 我尝试使用WindowsFormsHost的Tag-property但没有成功(比较如下)。 ViewModel中的属性未更新。 有任何想法吗? XAML C# public FancyOpenGlControl() { this.InitializeComponent(); this.glControl = new OpenGLControl(); this.glControl.Dock = DockStyle.Fill; this.WindowsFormsHost.Child = this.glControl; this.glControl.HandleCreated += this.GlControlOnHandleCreated; } private void GlControlOnHandleCreated(object sender, EventArgs eventArgs) { this.WindowsFormsHost.Tag = new Scene(this.glControl); // Doesn’t work. //BindingExpression bindingExpression = this.WindowsFormsHost.GetBindingExpression(TagProperty); //if (bindingExpression != null) //{ // […]

创建staticresource的多个副本

我有一个项目控件模板,如下所示。 我需要为模板中的每个项目单独设置colorProvider实例。 items控件中的每个项目都需要Color Provider的单独实例,具体取决于它绑定的项目。 如何创建staticresource的多个副本,以便staticresource仅适用于该项目。

将csproj文件从winform转换为wpf

我有一个Winform应用程序,有一个非常简单的forms,program.cs主文件和大约60个后端.cs文件。 我想将项目转换为WPF应用程序。 看这里没有显示任何接近我想做的事情。 我需要 转换csproj文件,这样我就可以添加WPF窗口了 转换要“就地”完成,以保持我的源代码控制整洁,避免将所有后端文件添加回适当文件夹的麻烦,添加对外部依赖项的引用等。 创建一个空的mainwindow.xaml(+ .cs)文件,我将手动填充相应的控件。 然后,我将在视图和viewmodel文件之间手动拆分旧表单文件的内容。 有什么方法比从头开始更容易? 编辑:我宁愿不将新的WPF ui托管到旧的winforms shell中,而是用wpf替换当前的表单应用程序。 编辑2:我不想将整个项目和架构转换为WPF(因为它被问及在SO上多次回答),我完全理解这些是2个不同的框架,我完全愿意手动进行更改。 我想转换csproj所以它将编译为WPF应用程序而不是Forms应用程序。

澄清MVVM中绑定Listbox.SelectedItem

我在我的一个用户控件中有一个ListBox ,我希望在ViewModel中使用SelectedItem 。 ListBox由TextBlocks组成。 这个问题几乎是我的问题的直接答案,但我不明白DisneyCharacter (他的集合类型)来自哪里,或者它与ListBox 。 我的类型是TextBlock吗? 要求的ListBox XAML:

在WPF中的动画中重复之间暂停

我已将以下FadeIn/FadeOut动画应用于WPF的Canvas 。 var fadingInOutAnimation = new DoubleAnimation { From = 1, To = 0, Duration = new Duration(TimeSpan.FromMilliseconds(1000)), AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever, }; MyCanvas.BeginAnimation(OpacityProperty, fadingInOutAnimation); 现在我希望它在到达动画结束时暂停1秒钟,然后再重复一次。 所以它是这样的: Animation — Pause (1 Sec) — Animation — Pause (1 Sec) and so on.

在MVVM中数据绑定ObservableCollection

我有一个带有Datatemplate的ListView,它包含一个电影列表。 它被数据绑定到ObservableColection但是每当我编辑Movie.Name时它都不会更新ListView,即使在我的PropertyChangedEventHandler中调用了“Name”并使用“Name”调用它。 我在我的初始化程序中为我的collections添加了2个“电影”,这些都显示正确(Klovn the Movie,Taken) 因此,当我单击编辑时,它应该更改所选电影的文本并将其名称更改为“测试”并且已更改,但更改未显示在ListView中,但如果我使用foreach输出Collection,则Name为Test。 View.xaml View.cs using System; using System.Windows; using MovieDB3.Models; using MovieDB3.ViewModels; namespace MovieDB3 { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private MainViewModel MVM; public MainWindow() { InitializeComponent(); MVM = new MainViewModel(); DataContext = MVM; } private void MenuEditClick(object sender, RoutedEventArgs e) { […]