Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。
ViewModel 中的 ObservableProperty 不会触发 WPF 中模型对象的 PropertyChanged
问题: 我正在开发一个 WPF 应用程序,使用 MVVM 模式和 CommunityToolkit.Mvvm 包来处理 ObservableProperty 和 INotifyPropertyChanged。但是,我遇到了一个问题
我有一个组合框,我在其中加载此类的元素 公共类 ComboBoxTypeItem { 公共字符串类型{获取;放; } 公共 BitmapSource 图标 { 获取;放; } 公共 ComboBoxTypeItem(
我已经制作了一个自助服务应用程序,一个 KIOSK 应用程序。产品列表以编程方式生成。在每个窗口上,该程序在触摸屏上都能正常运行。除了一扇窗户,我必须在那里
单击 StackPanel 中的“空白区域”时,上下文菜单不会出现
我有一个 HierarchicalDataTemplate,其中包含一些简单的项目,包含在水平 StackPanel 中。 上下文菜单也被分配给根 StackPanel 容器: 我有一个 HierarchicalDataTemplate,其中包含一些简单的项目,包含在水平 StackPanel 中。 上下文菜单也被分配给根 StackPanel 容器: <HierarchicalDataTemplate DataType="{x:Type data:GroupViewModel}" ItemsSource="{Binding Path=Children}"> <StackPanel Orientation="Horizontal" Margin="2" ContextMenuOpening="groupContextMenuOpening"> <StackPanel.ContextMenu> <StaticResource ResourceKey="groupContextMenu" /> </StackPanel.ContextMenu> <Rectangle Width="16" Height="15" Fill="{Binding Converter={StaticResource HierarchyLevelConverter}}" Margin="0 0 3 0" Cursor="Hand" > <i:Interaction.Triggers> <i:EventTrigger EventName="MouseLeftButtonDown" > <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding SetCurrent}"/> </i:EventTrigger> </i:Interaction.Triggers> </Rectangle> <Image Width="16" Height="15" Source="{Binding Path=GroupState, Converter={StaticResource GroupStateConverter}}" Cursor="Hand" Margin="0 0 3 0"> <i:Interaction.Triggers> <i:EventTrigger EventName="MouseLeftButtonDown" > <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding ToggleGroupState}"/> </i:EventTrigger> </i:Interaction.Triggers> </Image> </StackPanel> </HierarchicalDataTemplate> 宿主 TreeView 也使用 ContextMenu。 这个想法是,如果右键单击 TreeView 中的某个项目,您将获得它的上下文菜单。 如果您在树视图中的空白处右键单击,您将获得带有较少选项的“默认”上下文菜单。 除了一个奇怪的问题之外,这一切都有效。 正如您所看到的,水平 StackPanel 在图像之间留有边距。如果我右键单击项目之间的空间,则会显示 TreeView 上下文菜单。我希望当我右键单击 StackPanel 本身时,会弹出 HierarchicalDataTemplate 中定义的 ContextMenu。 我发现,如果我为 StackPanel 分配背景颜色,它就可以工作,但如果可能的话,我宁愿避免这种情况。 有什么想法吗? 将Background的StackPanel设置为Transparent,使其在那些空白区域进行命中测试。 将内部嵌入到 . 然后,我将上面的@brunnerh解决方案直接应用到画布上。 它有效。 <ScrollViewer > <Canvas x:Name="Cnvs" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Transparent" /> </ScrollViewer>
我的用户控件中有一个 WPFToolkit Datagrid。我正在 mvvm 模式创建用户控件。如何在数据网格中实现分页? 有没有默认的分页机制或者我们必须去
我的项目中有一个Xaml代码,如下所示: 我的项目中有一个 Xaml 代码,如下所示: <Window.Resources> <!-- MoveThumb Template --> <ControlTemplate x:Key="MoveThumbTemplate" TargetType="{x:Type local:MoveThumb}"> <Rectangle Fill="Transparent"/> </ControlTemplate> <!-- ResizeDecorator Template --> <ControlTemplate x:Key="ResizeDecoratorTemplate" TargetType="{x:Type Control}"> <Grid> <local:ResizeThumb Height="3" Cursor="SizeNS" Margin="0 -4 0 0" VerticalAlignment="Top" HorizontalAlignment="Stretch"/> <local:ResizeThumb Width="3" Cursor="SizeWE" Margin="-4 0 0 0" VerticalAlignment="Stretch" HorizontalAlignment="Left"/> <local:ResizeThumb Width="3" Cursor="SizeWE" Margin="0 0 -4 0" VerticalAlignment="Stretch" HorizontalAlignment="Right"/> <local:ResizeThumb Height="3" Cursor="SizeNS" Margin="0 0 0 -4" VerticalAlignment="Bottom" HorizontalAlignment="Stretch"/> <local:ResizeThumb Width="7" Height="7" Cursor="SizeNWSE" Margin="-6 -6 0 0" VerticalAlignment="Top" HorizontalAlignment="Left"/> <local:ResizeThumb Width="7" Height="7" Cursor="SizeNESW" Margin="0 -6 -6 0" VerticalAlignment="Top" HorizontalAlignment="Right"/> <local:ResizeThumb Width="7" Height="7" Cursor="SizeNESW" Margin="-6 0 0 -6" VerticalAlignment="Bottom" HorizontalAlignment="Left"/> <local:ResizeThumb Width="7" Height="7" Cursor="SizeNWSE" Margin="0 0 -6 -6" VerticalAlignment="Bottom" HorizontalAlignment="Right"/> </Grid> </ControlTemplate> <!-- Designer Item Template--> <ControlTemplate x:Key="DesignerItemTemplate" TargetType="ContentControl"> <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"> <local:MoveThumb Template="{StaticResource MoveThumbTemplate}" Cursor="SizeAll"/> <Control Template="{StaticResource ResizeDecoratorTemplate}"/> <ContentPresenter Content="{TemplateBinding ContentControl.Content}"/> </Grid> </ControlTemplate> </Window.Resources> .... <Canvas x:Name="Container" Background="Transparent">**strong text** <ContentControl Width="130" MinWidth="50" Height="130" MinHeight="50" Canvas.Top="150" Canvas.Left="150" Template="{StaticResource DesignerItemTemplate}"> <Rectangle Fill="AliceBlue" Opacity="0.5" Margin="10" Stroke="Blue" StrokeThickness="1" RadiusX="0" /> </ContentControl> </Canvas MoveThumb.CS using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Controls.Primitives; namespace Test_Canvas_Rectangle { class MoveThumb: Thumb { public MoveThumb() { DragDelta += new DragDeltaEventHandler(this.MoveThumb_DragDelta); } private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e) { Control designerItem = this.DataContext as Control; if (designerItem != null) { double left = Canvas.GetLeft(designerItem); double top = Canvas.GetTop(designerItem); Canvas.SetLeft(designerItem, left + e.HorizontalChange); Canvas.SetTop(designerItem, top + e.VerticalChange); } } } } 调整Thumb.CS using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; namespace Test_Canvas_Rectangle { class ResizeThumb : Thumb { public ResizeThumb() { DragDelta += new DragDeltaEventHandler(this.ResizeThumb_DragDelta); } private void ResizeThumb_DragDelta(object sender, DragDeltaEventArgs e) { Control designerItem = this.DataContext as Control; if (designerItem != null) { double deltaVertical, deltaHorizontal; switch (VerticalAlignment) { case VerticalAlignment.Bottom: deltaVertical = Math.Min(-e.VerticalChange, designerItem.ActualHeight - designerItem.MinHeight); designerItem.Height -= deltaVertical; break; case VerticalAlignment.Top: deltaVertical = Math.Min(e.VerticalChange, designerItem.ActualHeight - designerItem.MinHeight); Canvas.SetTop(designerItem, Canvas.GetTop(designerItem) + deltaVertical); designerItem.Height -= deltaVertical; break; default: break; } switch (HorizontalAlignment) { case HorizontalAlignment.Left: deltaHorizontal = Math.Min(e.HorizontalChange, designerItem.ActualWidth - designerItem.MinWidth); Canvas.SetLeft(designerItem, Canvas.GetLeft(designerItem) + deltaHorizontal); designerItem.Width -= deltaHorizontal; break; case HorizontalAlignment.Right: deltaHorizontal = Math.Min(-e.HorizontalChange, designerItem.ActualWidth - designerItem.MinWidth); designerItem.Width -= deltaHorizontal; break; default: break; } } e.Handled = true; } } } 实际上我想添加矩形使用C# Side使用鼠标移动如下: private void Grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { var Limit = (FrameworkElement)sender; // Set left mouse button state to released _LeftMouseHeld = false; // Hide all the listbox (if you forget to specify width and height you will have remanent coordinates SelectBox.Visibility = Visibility.Collapsed; SelectBox.Width = 0; SelectBox.Height = 0; Random rnd = new Random(Guid.NewGuid().ToString().GetHashCode()); CC = new ContentControl() { Width = width, Height = height, Template = DesignerItemTemplate, }; rec = new Rectangle() { Fill = PickRandomBrush(rnd), Opacity = 0.5, }; //CC.Content = rec; //CC.Content = rec; Container.Children.Add(CC); if (currentPos.X > _InitPos.X) { Canvas.SetLeft(rec, _InitPos.X); rec.Width = currentPos.X - _InitPos.X; } else { Canvas.SetLeft(rec, currentPos.X); rec.Width = _InitPos.X - currentPos.X; } // Y coordinates if (currentPos.Y > _InitPos.Y) { Canvas.SetTop(rec, _InitPos.Y); rec.Height = currentPos.Y - _InitPos.Y; } else { Canvas.SetTop(rec, currentPos.Y); rec.Height = _InitPos.Y - currentPos.Y; } Limit.ReleaseMouseCapture(); } 问题是我无法在我的应用程序中显示矩形和 conrolTemplate。 我尝试使用 Container.Children.Add(rec); 显示矩形 它显示了结果,但我无法将矩形添加到我的控件项目中。 感谢您的帮助 我找到了一个非常有用的代码示例并按照我自己的风格对其进行了定制。此示例可以向画布添加不同的形状,并使用户能够在运行时更改大小以及选择和移动。 通过删除一些 Feachers 并更改颜色,以及删除一些附加功能,我们得到了所需的正确结果
为什么 System.Windows.Markup.XamlParseException:“在‘System.Windows.StaticResourceExtension’上提供值引发了异常。错误
不知道为什么会出现此错误: 不知道为什么会出现此错误: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <SolidColorBrush x:Key="MyBrush" Color="SkyBlue"/> <Style x:Key="MyButtonStyle" TargetType="Button"> <Setter Property="Background" Value="{StaticResource MyBrush}"/> <Setter Property="Foreground" Value="White"/> <Setter Property="FontSize" Value="16"/> <Setter Property="Padding" Value="10"/> </Style> </Window.Resources> <Grid> <Button Content="Click Me" Style="{StaticResource MyButtonStyle}" /> </Grid> </Window> 是视觉工作室的问题吗?或者什么?我真的不明白这个错误?为什么?怎么了。请帮助我! 只需将 .NET 版本从 8 更改为 9 即可,一切正常)我不知道为什么...
重用 DependencyProperty 与创建新 DependencyProperty 的优缺点
我正在创建自己的自定义控件。我的自定义控件内的主要控件将是一个 TextBox,当然我的自定义控件应该有一个文本的 DependencyProperty,即
我正在打印 WPF 网格。只要数据适合一页,一切就可以正常工作。但有时网格包含更多数据。因此我需要将网格分成多个页面。任何人都可以...
我的 WPF 应用程序中有一个 DataGrid。 我想知道是否有一种方法可以显示数据网格中列的默认值。 例如,我让用户能够向
PresentationFramework 中使用实时整形时“对象引用未设置到对象的实例”
我在 LifeShaping 过滤的PresentationFramework 中收到空引用: 堆栈跟踪没有给我太多线索: 在 System.Windows.Data.ListCollectionView.RestoreLiveShaping()...
CommunityToolkit.WinUI.Converters 无法按照文档工作
继续我的 WPF 到 WinUI 迁移传奇(第 1 部分可以在此处查看)。因为我已经在使用 MVVM 社区工具包,所以我也在使用其中的一些其他产品。 我尝试过,而不是
使用 TabControl 时 SciChart CompositeAnnotation 消失
我创建了一个复合注释(名为 PeakAnnotation),它由四个元素组成:两个 VerticalLineAnnotations、一个 BoxAnnotation 和一个 TextAnnotation。 当我第一次添加注释时,
我花了一天时间查看有关此主题的其他问题,但无法使此特定代码正常工作。 背景:我们使用 Prism 自动注册视图的视图模型并使用
C# OracleCommand 使用单个游标返回多个数据表作为输出参数
我有一个如下所示的 SQL 文件: 宣布 V_ID_CB VARCHAR2(15) := '{V_ID_CB}'; V_X_CB VARCHAR2(15) := '{V_X_CB}'; 开始 如果 V_ID_CB 不为空则 打开:result_cursor FOR ...
我有这个数据网格,我使用以下代码动态生成除第一列之外的列。 var viewModel = (SnapshotViewModel)DataContext; foreach(
我有一个带有数据模板的列表框,其中包含复选框和文本块。如何使用模板中的复选框进行多重选择,以便选择基于 isChecked pr...
当前正在检查可缩放 wpf 应用程序屏幕上的内容的控件。 敲击校准部分,因为需要显示光标下方内容的缩放内容...
我升级到了 Windows 10 PRO 20H2 计算机,该计算机具有带有 wpf 的 .net 桌面应用程序。 (.net 版本 4.8)当尝试与仅支持 SSL3 的服务通信时,出现错误。通过c...