Tag: wpf

如何在Canvas中拖动UserControl

我正在编写我的第一个WPF应用程序。 我有一个Canvas,用户可以在其中添加包含表单的UserControl子类。 用户应该能够在Canvas周围拖动这些UserControl。 使用WPF执行此操作的最佳做​​法是什么? 谢谢。

在创建ListView时将其添加到ListView

我在canvas中创建形状(矩形,椭圆,线条)。 然后我在另一个窗口中有一个listview,我需要输入形状的信息(如位置,大小,形状是什么)。 我在另一个窗口的XAML中有这个代码: 在主窗口的c#中,我有一个可观察的集合和这段代码: ObservableCollection shapes = new ObservableCollection(); myRect.Width = var1; myRect.Height = var2; Page.Children.Add(myRect); Canvas.SetLeft(myRect, posx); Canvas.SetTop(myRect, posy); shapes.Add(myRect); 2ndwindow.Information.ItemsSource = shapes; // this is working because the 2ndwindow is owned by the mainwindow 编辑:我设法绑定宽度和高度,但我不知道如何绑定位置和形状(矩形或椭圆形)

在MVVM中为View提供一些命令

我们假设我有一些用户控制权。 用户控件有一些子窗口。 并且用户控制用户想要关闭某种类型的子窗口。 用户控制代码中有一种方法: public void CloseChildWindows(ChildWindowType type) { … } 但我无法调用此方法,因为我无法直接访问该视图。 我想到的另一个解决方案是以某种方式将用户控件ViewModel公开为其属性之一(因此我可以绑定它并直接向ViewModel发出命令)。 但我不希望用户控制用户知道有关用户控件ViewModel的任何信息。 那么解决这个问题的正确方法是什么?

C#中的静态变量初始化顺序是什么?

DependencyProperty.AddOwner MSDN页面提供了一个示例,其中包含两个具有静态成员的类,并且一个类的成员依赖于另一个类的成员进行初始化。 我认为MSDN是错误的 – 静态变量的初始化顺序在C#中是不可靠的, 就像在C ++或其他任何地方一样。 我可能错了,因为WPF库本身就是这样编写的,它运行得很好。 我错过了什么? C#编译器如何知道安全初始化顺序?

如何在可导航的应用程序中支持与MVVM绑定的ListBox SelectedItems

我正在制作一个可通过自定义“下一步”和“后退”按钮和命令(即不使用NavigationWindow ) NavigationWindow的WPF应用程序。 在一个屏幕上,我有一个ListBox ,必须支持多个选择(使用Extended模式)。 我有一个这个屏幕的视图模型,并将所选项目存储为属性,因为它们需要维护。 但是,我知道ListBox的SelectedItems属性是只读的。 我一直在尝试使用此解决方案解决此问题 ,但我无法将其应用到我的实现中。 我发现无法区分何时取消选择一个或多个元素以及何时在屏幕之间导航(在两种情况下都会引发NotifyCollectionChangedAction.Remove ,因为从技术上讲,在离开屏幕时会取消选择所有选定的项目)。 我的导航命令位于一个单独的视图模型中,该模型管理每个屏幕的视图模型,因此我不能将任何与视图模型相关的实现与ListBox放在那里。 我找到了其他一些不太优雅的解决方案,但这些解决方案似乎都没有强制实现视图模型和视图之间的双向绑定。 任何帮助将不胜感激。 我可以提供一些我的源代码,如果它有助于理解我的问题。

你可以从另一个线程访问UI元素吗? (没有设定)

我在google / here上看到很multithreading在UPDATING来自另一个线程的UI元素。 如果我想获得复选框的值,该怎么办? 我能不做任何特别的事情吗?

WPF Dispatcher {“调用线程无法访问此对象,因为另一个线程拥有它。”}

首先,我需要说我是WPF和C#的菜鸟。 应用程序:创建Mandelbrot图像(GUI)我的调度程序完美地适用于这种情况: private void progressBarRefresh(){ while ((con.Progress) < 99) { progressBar1.Dispatcher.Invoke(DispatcherPriority.Send, new Action(delegate { progressBar1.Value = con.Progress; } )); } } 当使用以下代码执行此操作时,我收到消息(标题): bmp = BitmapSource.Create(width, height, 96, 96, pf, null, rawImage, stride); this.Dispatcher.Invoke(DispatcherPriority.Send, new Action(delegate { img.Source = bmp; ViewBox.Child = img; //vllt am schluss } )); 我将尝试解释我的程序是如何工作的。 我创建了一个新的Thread(因为GUI不响应)来计算像素和颜色。 在此线程(方法)中,我在计算准备好后使用Dispatcher在ViewBox中刷新我的图像。 当我不将计算放在单独的线程中时,我可以刷新或构建我的图像。

stackpanel的水平滚动不起作用

我尝试创建一个可滚动的水平堆栈面板,但我没有成功… 目前我的stackpanel有一个auto宽度(问题可能就在这里),其中包含一些像grids一样的项目。 现在,如果我的所有网格在stackpanel中都不可见(宽度太短)我无法滚动。 我已经尝试将stackpanel放在ScrollViewer但它也不起作用。 我怎么能把它搞定? 谢谢 编辑这里是我的代码:

WPF INotifyPropertyChanged如何工作?

这是在WPF / C#中使用Binding的典型INotifyPropertyChanged实现。 namespace notifications.ViewModel { class MainViewModel : INotifyPropertyChanged { public const string NamePropertyName = “CheckBoxState”; private bool _checkboxstate = true; public bool CheckBoxState { get { return _checkboxstate; } set { if (_checkboxstate == value) return; _checkboxstate = value; RaisePropertyChanged(NamePropertyName); } } public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string propertyName) { if (PropertyChanged […]

WPF / MVVM – 如何在ViewModel中双击TreeViewItems?

(注意 – 这是一个重新发布,因为我的第一个问题是在错误的标题下发布的:对不起!) 我有一个标准的WPF树视图,并有绑定项目来查看模型类。 我现在希望在双击项目时处理行为(打开文档visual-studio-style)。 我可以在树视图(显示xaml)的控件中触发事件处理程序,但是如何绑定到视图模型类上的特定行为 – 例如ProjectViewModel? 优先受ICommand实施者约束,因为这在别处使用…