Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。
如何在WPF中从ViewModel设置Fluent.Ribbon StartScreen的IsOpen属性?
我正在使用 Fluent.Ribbon 库开发 WPF 应用程序,并且在从视图模型设置 StartScreen 控件的 IsOpen 属性时遇到问题。 我有一个 MainViewModel...
如何使用 C# 在 WPF 应用程序上单击按钮来添加控件行?
我有一个非常简单的要求。我有一个 WPF 应用程序,当前有 2 个网格。第一个网格应该包含某种数据输入表单,第二个网格只有一个“添加”按钮。 我有一个非常简单的要求。我有一个 WPF 应用程序,当前有 2 个网格。第一个网格应该包含某种数据输入形式,第二个网格只有一个“添加”按钮。 <Window x:Class="Desing.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Desing" Height="600" Width="850" > <Grid> <StackPanel> <Grid x:Name="entryGrid"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Label HorizontalContentAlignment="Center" Grid.Column="0" Content="SL NO"/> <Label HorizontalContentAlignment="Center" Grid.Column="1" Content="DESCRIPTION"/> <Label HorizontalContentAlignment="Center" Grid.Column="2" Content="UNIT"/> <Label HorizontalContentAlignment="Center" Grid.Column="3" Content="UOM"/> <Label HorizontalContentAlignment="Center" Grid.Column="4" Content="RATE"/> <Label HorizontalContentAlignment="Center" Grid.Column="5" Content="AMOUNT"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="1" Grid.Column="0"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="1" Grid.Column="1"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="1" Grid.Column="2"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="1" Grid.Column="3"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="1" Grid.Column="4"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="1" Grid.Column="5"/> </Grid> <Grid Margin="10"> <Button Width="50" Content="Add" Click="Button_Click"/> </Grid> </StackPanel> </Grid> </Window> 我想要的是,当我单击“添加”按钮时,应将具有相同属性的文本框的新行添加到视图中。单击按钮后,它将添加到 xaml 中另一个 <RowDefinition Height="Auto"/> 和 <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="2" Grid.Column="0"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="2" Grid.Column="1"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="2" Grid.Column="2"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="2" Grid.Column="3"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="2" Grid.Column="4"/> <TextBox Margin="5 2 8 2" VerticalAlignment="Top" Height="25" Grid.Row="2" Grid.Column="5"/> 视图将变成 来自 等等... 最好的方法是什么? 我尝试过以下代码: void Button_Click(object sender, RoutedEventArgs e) { RowDefinition newRow = new RowDefinition(); newRow.Height = new GridLength(1, GridUnitType.Star); entryGrid.RowDefinitions.Add(newRow); int rowCount = entryGrid.RowDefinitions.Count; TextBox[] textBoxes = new TextBox[6]; for (int i = 0; i < textBoxes.Length; i++) { textBoxes[i] = new TextBox(); textBoxes[i].Margin = new Thickness(5, 2, 8, 2); textBoxes[i].VerticalAlignment = VerticalAlignment.Top; textBoxes[i].Height = 25; Grid.SetRow(textBoxes[i], rowCount + 1); Grid.SetColumn(textBoxes[i], i); entryGrid.Children.Add(textBoxes[i]); } MessageBox.Show("New row added!"); } 但它仅在我第一次单击按钮时有效,后续单击时不会添加新行。 您不需要TextBox[]。 此外,由于 RowDefinitions 的索引是从零开始的,因此您应该将 Grid.Row 附加属性设置为 entryGrid.RowDefinitions.Count - 1。 试试这个: void Button_Click(object sender, RoutedEventArgs e) { RowDefinition newRow = new RowDefinition(); newRow.Height = new GridLength(1, GridUnitType.Star); entryGrid.RowDefinitions.Add(newRow); int rowCount = entryGrid.RowDefinitions.Count - 1; for (int i = 0; i < 6; i++) { TextBox textBox = new TextBox(); textBox.Margin = new Thickness(5, 2, 8, 2); textBox.VerticalAlignment = VerticalAlignment.Top; textBox.Height = 25; Grid.SetRow(textBox, rowCount); Grid.SetColumn(textBox, i); entryGrid.Children.Add(textBox); } MessageBox.Show("New row added!"); } 正如评论中提到的,您可能想了解如何使用 DataGrid 控件或 ItemsControl 来重复项目。
我想在WPF中开发一个新的CAD软件,而不是使用WPF 3D,是否可以使用Unity3D作为我的图形引擎,能够旋转,平移,缩放和查看基于...的3D图形对象
我正在使用 C# 和 WPF 制作一个简单的太空探索游戏。我有一个错误,尽管我尽了最大努力来修复它,但它仍然存在。我有一个明星类,它的构造函数将随机生成......
窗口关闭后无法设置可见性或调用 Show、ShowDialog 或 EnsureHandle
这是我的 WPF 应用程序的应用程序构造函数: 公共部分类App { 公共应用程序() { 运行(新登录(假)); } } 这是我的登录构造函数: 公共登录(布尔
CollectionView 不支持在等待后从与 Dispatcher 线程不同的线程更改其 SourceCollection
我有一个带有 ICommand 的 WPF 应用程序,如下所示: 公共 ObservableCollection 顾问 { get;放; } 选定的公共顾问 { get;放; } 公共 ICommand InsertComm...
C# WPF 滑块 AutoToolTipPlacement 样式
现在我陷入了如何设置滑块 AutoToolTipPlacement 中工具提示样式的困境。有什么方法可以做到吗?我需要能够更改工具提示的结构和文本。 杜...
我正在考虑为 WPF 应用程序使用 ListBox 或 ListView。似乎要么支持数据绑定,要么支持项目模板。我的应用程序有一个简单的项目列表,我打算能够实现
如何使用 MVVM 将 WPF TabItem 绑定到特定的 C# 类?
我想将 TabControl 的每个 TabItem 绑定到特定的 C# 类,以使用类属性的状态来对 View 进行反应。我尝试使用 MVVM,我知道这样可以更好地将对象集合绑定到
如何在 C# 和 WPF 中从 itemsource/list 创建 tabitem 标头?
当 JSON 文件中有可观察的集合时,我尝试为 tabitem 创建标头,如下面的代码所示。 // 将 JSON 数组反序列化为 List 列表 当 JSON 文件中有可观察的集合时,我尝试为 tabitem 创建标头,如下面的代码所示。 // Deserialize the JSON array into a List<ModelClass> List<Model> dataList = JsonConvert.DeserializeObject<List<Model>>(messagecontent); // Convert List<ModelClass> to ObservableCollection<ModelClass> ObservableCollection<Model> observableCollection = new ObservableCollection<Model>(dataList); Dispatcher.Invoke(() => { TabitemSub.Items.Clear(); TabitemSub.ItemsSource = observableCollection; foreach (var item in observableCollection) { TabItem tabitem = new TabItem(); tabitem.Header = item.property1; TabitemSub.Items.Add(tabitem); } } 我的Xaml: <GroupBox Grid.Row="1" Header="Groupbox1:" BorderThickness="2" FontWeight="Bold" FontSize="15" BorderBrush="Black" Margin="5"> <Grid HorizontalAlignment="Stretch" Width="Auto"> <TabControl> <TabItem Header="TabitemMain"> <TabControl x:Name="TabitemSub" Height="500" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="5"> </TabControl> </TabItem> 但是每次我运行代码而不是给我一串 property1 时,我都会继续获取模型的路径,例如每个项目结果中的 project.MVVM.Model.Model 。为什么会发生这种情况?我该如何解决这个问题? 谢谢你 如果我进行以下更改,则设法使其正常工作: Dispatcher.Invoke(() => { TabitemSub.Items.Clear(); foreach (Model item in datalist) { TabItem tabitem = new TabItem(); tabitem.Header = item.property1; TabitemSub.Items.Add(tabitem); } } 然后它将为每个 property1 值创建选项卡。
为什么将 .Net 8.0 应用程序目标操作系统版本从 7 更改为 10 会使输出大小乘以 100?
我在.Net 8.0 上有一个简单的 WPF 应用程序。 (但我认为以下内容也适用于 6.0。) 当目标操作系统版本*保留为 7.0 时,输出文件夹的大小小于 200 kb。 当
我的视图上有一个带有简单命令绑定的按钮: ... 我的视图上有一个带有简单命令绑定的按钮: <Window ...> <Window.DataContext> <vm:ShellViewModel /> </Window.DataContext> ... <Button Command="{Binding DoSomethingCoolCommand}" Content="Execute" /> 还有虚拟机: public class ShellViewModel : ObservableObject { private RelayCommand _doSomethingCoolCommand; public ICommand DoSomethingCoolCommand { get { return _doSomethingCoolCommand ?? (_doSomethingCoolCommand = new RelayCommand(DoSomethingCool)); } } private void DoSomethingCool() { ... } 但是,该按钮在应用程序/视图启动时被禁用,并且我无法启用它。我尝试将命令执行评估传递给 RelayCommand 并在视图上设置 IsEnabled 。我是不是错过了什么? 编辑 RelayCommand 和 ObservableObject 来自 mvvm Foundation 项目,如标签中所述。链接:https://mvvmfoundation.codeplex.com 您是否检查过是否有任何按钮父级的状态为禁用?这也会禁用所有子控件。 旁注: 你似乎从来没有调用过CommandManager.InvalidateRequerySuggested(),并且它没有在RelayCommand类中实现,只是事件的注册,如here所示。默认情况下,ICommand 或 RelayCommand 永远不会使其状态更新无效。你必须这样做。通过调用 CommandManager.InvalidateRequerySuggested(),这将建议重新查询所有已注册的命令(因为按钮 1 中的操作可能会影响许多其他命令。 例如,可能有一个 IsProcessing 属性,当它的值更改时,您可以调用 CommandManager.InvalidateRequerySuggested() 来更新所有其他命令的状态。
我有两个项目 这是主要的 WPF 项目配置,我想在其中显示引用项目中的图像。主要项目是一个.NET Core WPF,名称为CH07.RemoteBinaryResour...
我希望 POPUP 内的 ComboBox 项目采用 ToggleButton 的高度和宽度,对于宽度来说很好,因为我可以将它绑定在 POPUP 上,但高度适用于每个 ComboBox 项目,这是一个单独的...
我正在尝试将 TextBlock 绑定到 ObservableCollection 中的特定元素。 这就是我现在所做的: 私有 ObservableCollection arr = new ObservableCollection...
C# WPF datagrid行高不会超过datagrid高度
在C#、WPF和Visual Studio中,我在数据网格中显示来自sql数据库的一些数据,在描述列中它可能有很多行,目前它会截断行的显示
请注意,我对 WPF 和 Avalonia 并没有完全了解,所以请放过我一些 :( 一旦出现未处理的异常,我想在退出程序之前向用户显示一些信息...
应用程序返回“[ClassName] 在命名空间中不存在”,即使它在同一命名空间中明确声明
我正在使用 Windows95-WPF GitHub 项目中的代码,但是即使是这样,我似乎也找不到问题。 我尝试更改名称空间,尝试验证名称空间...
我有具有固定列数(5 列)的 DataGrid 控件,它是通过以下代码创建的: m_dictionary_data = new DataGrid(); { // 字典数据初始化 ...