wpf 相关问题

Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。

如何在WPF中使用DockStyle.Fill作为标准控件?

我从 Windows 窗体中使用,我创建一个面板,将控件放置在其中并为它们提供 DockStyle.Fill 以最大程度地扩大其周围面板的大小。 在 WPF 中我想要同样的。我有一个

回答 5 投票 0

DataGrid 列宽不会自动更新

当 Change 的值更新时,其列不会更新为 fi...

回答 6 投票 0

C# - 在可见、禁用和折叠之间更改按钮样式

我目前有一个带有 ICommand 的按钮,当 CanExecute 返回 true 时启用该按钮,当 CanExecute 返回 false 时禁用该按钮。代码如下所示: 我目前有一个带有 ICommand 的按钮,当 CanExecute 返回 true 时启用该按钮,当 CanExecute 返回 false 时禁用该按钮。代码如下所示: <Button Command="{Binding CommandEdit}" Content="Edit" /> 现在我想要第三个选项,如果按钮被禁用,也可以隐藏该按钮。但这必须是可选的,即并非所有禁用的按钮都应该隐藏,有时可以为状态 x 禁用按钮并为状态 y 隐藏。 我的第一个想法是向名为 Hidden() 的命令添加新方法并在样式中获取该方法,但我不知道如何在样式中获取该命令。 <Button Command="{Binding CommandEdit}" Content="Edit" Style="{StaticResource DefaultButton}" /> <Style x:Key="DefaultButton" TargetType="Button" BasedOn="{StaticResource DefaultButtonStyle}"> <Style.Triggers> <DataTrigger Binding="{Binding Command.Hidden}" Value="True"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger > </Style.Triggers> </Style> 如果我无法以样式访问该命令,您知道如何区分禁用和隐藏吗? 从 UI 的角度来看,(在您的任务中)按钮是否禁用并不重要。 您的任务是使禁用的按钮不可见。 对于 Collapsed,使用 .Net 中已有的转换器就足够了: <!-- In your resources section of the XAML --> <BooleanToVisibilityConverter x:Key="BoolToVis" /> <Button Command="{Binding CommandEdit}" Content="Edit" Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={StaticResource BoolToVis}}" /> 对于隐藏或状态反转,您需要使用自己的自定义转换器或设置样式触发器。

回答 1 投票 0

如何在 WPF 中使用 MVVM 模式将项目添加到列表

如何使用 WPF 中 MVVM 模式中的当前终端更新我的 TerminalList-View?我将 List _terminals 传递给 ViewModel,但我不知道如何将其分配给可观察的集合...

回答 1 投票 0

如何在 WPF 中的鼠标悬停时显示悬停信息气泡?

我想让鼠标悬停在 TextBlock 上时出现文本气泡。 以下代码是我能得到的最接近的代码,但它只是将文本注入 TextBox.Text 本身并更改颜色。我想要...

回答 2 投票 0

WPF MVVM UI 初始化后不会更新

我有一个 xaml 脚本,它不会监听 OnPropertyChanged。初始化视图时,它可以正常工作,但我无法更新它。 零件.xaml: 我有一个 xaml 脚本,它不会监听 OnPropertyChanged。初始化视图时,它可以正常工作,但我无法更新它。 零件.xaml: <UserControl x:Class="Page_Navigation_App.View.Parts" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:vm="clr-namespace:Page_Navigation_App.ViewModel" xmlns:utils="clr-namespace:Page_Navigation_App.Utilities" mc:Ignorable="d" d:DesignHeight="600" d:DesignWidth="622" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{StaticResource Page_Style}"> <UserControl.DataContext> <vm:PartsVM x:Name="_model"/> </UserControl.DataContext> ..... <Grid Margin="15"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="5" /> <!-- Width for the splitter --> <ColumnDefinition Width="*" /> <!-- Width of the details pane --> </Grid.ColumnDefinitions> <!-- ListView for Parts or Variants --> <ListView ItemsSource="{Binding TableData}" SelectedItem="{Binding SelectedPart, Mode=TwoWay}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" Margin="0,0,0,10" Visibility="{Binding PartsVisibility}"> <ListView.ItemTemplate> <DataTemplate> <!-- Card Container --> <Border Background="#343a40" CornerRadius="10" Padding="10" BorderBrush="#3C3F41" BorderThickness="1" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.ColumnSpan="3" Width="Auto" > <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <!-- Define rows for labels, values, and button --> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <!-- ID Field --> <TextBlock Text="Image:" FontWeight="Bold" Foreground="White" Margin="0,0,10,0" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" /> <TextBlock Text="{Binding [ID], UpdateSourceTrigger = PropertyChanged}" Foreground="White" Margin="0,0,20,0" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" /> <!-- Description Field --> <TextBlock Text="Description:" FontWeight="Bold" Foreground="White" Margin="0,0,10,0" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" /> <TextBlock Text="{Binding [Description],UpdateSourceTrigger=PropertyChanged}" Foreground="White" Margin="0,0,20,0" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" /> <!-- Additional Details (Optional) --> <TextBlock Text="Type:" FontWeight="Bold" Foreground="White" Margin="0,0,10,0" Grid.Column="2" Grid.Row="0" Visibility="{Binding [Type], Converter={StaticResource StringToVisibilityConverter} }" HorizontalAlignment="Stretch" /> <TextBlock Text="{Binding [Type] , UpdateSourceTrigger=PropertyChanged}" Foreground="White" Margin="0,0,20,0" Grid.Column="2" Grid.Row="1" Visibility="{Binding [Type], Converter={StaticResource StringToVisibilityConverter}}" HorizontalAlignment="Stretch" /> <!-- Button --> <Button Content="Variants" Command="{Binding DataContext.ShowVariantsCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}} , UpdateSourceTrigger=PropertyChanged}" CommandParameter="{Binding}" Grid.Column="3" Grid.Row="0" Grid.RowSpan="3" VerticalAlignment="Stretch" Margin="0,10,0,0" HorizontalAlignment="Stretch" Padding="5,2"/> </Grid> </Border> </DataTemplate> </ListView.ItemTemplate> </ListView> Parts.xaml.cs: namespace Page_Navigation_App.View { /// <summary> /// Interaction logic for Customers.xaml /// </summary> public partial class Parts : UserControl { //private PartsVM _model = new PartsVM(); public Parts() { InitializeComponent(); //DataContext = new PartsVM(); } } } PartsVM.cs: using Microsoft.Data.SqlClient; using Page_Navigation_App.Utilities; using System; using System.Collections.ObjectModel; using System.Data; using System.Linq; using System.Windows; using System.Windows.Input; namespace Page_Navigation_App.ViewModel { class PartsVM : Utilities.ViewModelBase { private readonly DBHandler _dbHandler; private static string TCPServer = "*****"; private static string DBCatalog = "*****"; private string _test; //private DBHandler dbHandler; private SqlConnection _sqlConnection; private ObservableCollection<DataRow> _tableData; private DataRow _selectedPart; private ObservableCollection<Variant> _variants; private bool _isViewingVariants; private Visibility _partsVisibility; private Visibility _reversePartsVisibility = Visibility.Collapsed; private ObservableCollection<EndUser> _endUsers; private string tableName = "Sales.Parts"; // Define column names at the class level private readonly ObservableCollection<string> columnNames = new ObservableCollection<string> { "ID", "Description", "Type", "Comment" }; int i = 0; public ObservableCollection<EndUser> EndUsers { get { return _endUsers; } set { _endUsers = value; OnPropertyChanged(nameof(EndUsers)); } } public ObservableCollection<DataRow> TableData { get { return _tableData; } set { _tableData = value; OnPropertyChanged(nameof(TableData)); } } public string Test { get { return _test; } set { _test = value; OnPropertyChanged(nameof(Test)); } } public DataRow SelectedPart { get { return _selectedPart; } set { _selectedPart = value; OnPropertyChanged(); } } public ObservableCollection<Variant> Variants { get { return _variants; } set { _variants = value; OnPropertyChanged(); } } public bool IsViewingVariants { get { return _isViewingVariants; } set { _isViewingVariants = value; OnPropertyChanged(); } } public Visibility PartsVisibility { get { return _partsVisibility; } set { _partsVisibility = value; OnPropertyChanged(); } } public Visibility ReversePartsVisibility { get { return _reversePartsVisibility; } set { _reversePartsVisibility = value; OnPropertyChanged(); } } public ICommand ShowVariantsCommand { get; set; } public ICommand BackToPartsCommand { get; set; } public PartsVM() { _tableData = new ObservableCollection<DataRow>(); SQLConnectionManager.Initialize(); _sqlConnection = SQLConnectionManager.GetConnection(); if (_sqlConnection == null) { throw new InvalidOperationException("Database connection is not initialized."); } _dbHandler = new DBHandler(_sqlConnection); GetAll(); //Search("test"); } public void GetAll() { i++; string query = $"SELECT * FROM {tableName};"; var dataTable = new DataTable(); using (var command = new SqlCommand(query, _sqlConnection)) { using (var adapter = new SqlDataAdapter(command)) { // Fill the DataTable with the result of the query adapter.Fill(dataTable); } } this.Test = i.ToString(); // Convert DataTable rows to ObservableCollection<DataRow> var rows = new ObservableCollection<DataRow>(dataTable.AsEnumerable()); // Clear the existing TableData and add the new rows TableData.Clear(); /*foreach (var row in rows) { TableData.Add(row); }*/ TableData = rows; // Notify that TableData has changed //OnPropertyChanged(nameof(TableData)); } public void Search(string searchTerm) { // Escape special characters in searchTerm for SQL LIKE string escapedSearchTerm = "%" + searchTerm + "%"; // Generate the LIKE clause for each column string likeClause = string.Join(" OR ", columnNames.Select(col => $"{col} LIKE @searchTerm")); string query = $"SELECT * FROM {tableName} WHERE {likeClause};"; //MessageBox.Show(query); var dataTable = new DataTable(); using (var command = new SqlCommand(query, _sqlConnection)) { // Add the parameter once to be used in all LIKE statements command.Parameters.AddWithValue("@searchTerm", escapedSearchTerm); using (var adapter = new SqlDataAdapter(command)) { // Fill the dataTable with the query result adapter.Fill(dataTable); } } var rows = new ObservableCollection<DataRow>(dataTable.AsEnumerable()); int test = TableData.Count; // Convert DataTable rows to an ObservableCollection of DataRow TableData.Clear(); foreach (DataRow row in rows) { TableData.Add(row); } TableData = rows; } } } ViewmodelBase: namespace Page_Navigation_App.Utilities { class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged([CallerMemberName] string propName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName)); } } } 我知道函数被触发了,因为我已经调试过了。 搜索功能由不同脚本中的函数触发。我还知道 DataTable 正在正确更新,但 UI 不会更新。我尝试手动触发 PropertyChanged,无论是否显式设置 UpdateSourceTrigger。 我不知道为什么这不起作用。预先感谢 您使用的语法无效,这里正确的绑定语法是: <TextBlock Text="{Binding ID}" />

回答 1 投票 0

Tab 控制鼠标悬停

我正在尝试创建一个选项卡控件,其样式类似于 Google 的厨房水槽示例。 当鼠标移到选项卡上时,我希望能够更改其颜色,当我单击该选项卡时,其内容背景...

wpf
回答 2 投票 0

有没有办法检查当前应用程序是否是misx应用程序

我正在将当前使用 ClickOnce 部署的 C#/WPF 应用程序转换为 MSIX。我想检查代码,当前执行是否来自 MSIX 包,或者只是 .exe

回答 2 投票 0

如何从JObject获取第一个key?

我在我的项目中使用Newtonsoft.Json。我有这样的 JObject: { "4781":"姓名1", "1577":"名称 2", "9973":"姓名3" } 我用 JObject.Parse() 成功解析了它。我需要得到...

回答 2 投票 0

有没有办法使用滑块的 ControlTemplate 触发值更改事件

我正在尝试设计一个 ControlTemplate,使 Slider 看起来像 NumericUpDown 控件。 它有一个三列的网格,其中有一个递减按钮,一个显示的文本块...

回答 1 投票 0

如何在 WPF 中的工具提示中显示选项卡内容的预览?

我正在使用 TabControl 开发 WPF 应用程序,我希望通过将鼠标悬停在选项卡标题上时在其工具提示中显示每个选项卡内容的实时预览来增强用户体验。 我的...

回答 1 投票 0

如何在LiveCharts中添加每点工具提示?如何让同一条线上的点有不同的颜色?

我发现 LiveCharts 对于我正在做的事情非常有用。 目前我有两个悬而未决的问题。 使用WPF。 我有一个线系列,其中的各个点引用了一些数据 对...感兴趣

回答 2 投票 0

将矩形坐标转换为屏幕坐标以进行屏幕捕获[重复]

我正在使用 WPF 在 C# 中创建一个屏幕捕获应用程序,用户可以在屏幕上绘制一个矩形,应用程序捕获该矩形后面的内容,类似于 Windows Snip...

回答 1 投票 0

.NET 8 Core WPF:DragMove() 仅适用于 TextBox,不适用于 Border

我有一个带有自定义标题栏的简单 WPF 窗口,但 DragMove() 仅适用于 TextBlock。如果我尝试将窗口拖动到标题旁边的空白区域,则不会发生任何事情...... 我有一个带有自定义标题栏的简单 WPF 窗口,但 DragMove() 仅适用于 TextBlock。如果我尝试将窗口拖动到标题旁边的空白区域,则不会发生任何事情...... <Window x:Class="WPFApplication.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WPFApplication" mc:Ignorable="d" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen" WindowStyle="None" AllowsTransparency="True" Background="#FFFFFFFF" Title="WPF Application" Height="460" Width="1040"> <Grid> <!-- Custom Title Bar --> <Border Height="40" VerticalAlignment="Top" x:Name="TitleBar" Panel.ZIndex="1"> <DockPanel> <!-- App Name and Icon bar --> <StackPanel Margin="10,0,0,0" Orientation="Horizontal" DockPanel.Dock="Left"> <TextBlock Text="WPF Application" VerticalAlignment="Center" FontSize="16"/> </StackPanel> <!-- Window Control Buttons --> <StackPanel Orientation="Horizontal" DockPanel.Dock="Right" HorizontalAlignment="Right"> <!-- Minimize Button --> <Button Width="40" Content="_" Click="MinimizeWindow" Background="Transparent"/> <!-- Maximize/Restore Button --> <Button Width="40" Content="▢" Click="MaximizeRestoreWindow" Background="Transparent"/> <!-- Close Button --> <Button Width="40" Content="X" Click="CloseWindow" Background="Transparent"/> </StackPanel> </DockPanel> </Border> <TextBlock Text="test" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid> </Window> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); TitleBar.MouseDown += (sender, e) => { if (e.ButtonState == System.Windows.Input.MouseButtonState.Pressed) { // Call DragMove only if left mouse button is down this.DragMove(); } }; } private void MinimizeWindow(object sender, RoutedEventArgs e) { this.WindowState = WindowState.Minimized; } private void MaximizeRestoreWindow(object sender, RoutedEventArgs e) { if (this.WindowState == WindowState.Maximized) this.WindowState = WindowState.Normal; else this.WindowState = WindowState.Maximized; } private void CloseWindow(object sender, RoutedEventArgs e) { this.Close(); } } 谢谢@Sinatr!通过在 Background 元素上设置 Border 属性起作用。对于下一次 Google 搜索,现在我有了这个并且它正在工作 <Border Height="40" VerticalAlignment="Top" Background="{StaticResource ColorPrimary500}" x:Name="TitleBar" Panel.ZIndex="1">

回答 1 投票 0

DataBinding - 值通过 DataTemplate 不可见

我的 xaml 中有以下 DataTemplate: 我的 xaml 中有以下 DataTemplate: <DataGrid x:Name="ChecklistDataGrid" AutoGenerateColumns="False" HorizontalAlignment="Stretch" Foreground="White" VerticalAlignment="Stretch" Background="Transparent" RowBackground="Transparent" AlternatingRowBackground="Transparent" HorizontalGridLinesBrush="White" VerticalGridLinesBrush="White" CanUserAddRows="False" SelectionUnit="Cell"> <DataGrid.Resources> <!-- Custom Style for DataGridColumnHeader --> <Style TargetType="DataGridColumnHeader"> <Setter Property="Background" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="Foreground" Value="White"/> </Style> <!-- DataTemplate for Buttons --> <DataTemplate x:Key="ButtonTemplate"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Button Content="IO" Background="Green" Click="IOButton_Click" HorizontalAlignment="Stretch" Grid.Column="0"/> <Button Content="NIO" Background="Red" Click="NIOButton_Click" HorizontalAlignment="Stretch" Grid.Column="1"/> <Button Content="NR" Background="DarkGray" Click="NRButton_Click" HorizontalAlignment="Stretch" Grid.Column="2"/> </Grid> </DataTemplate> <!-- DataTemplate for TextBox with NR Button --> <DataTemplate x:Key="TextBoxTemplate"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <TextBox Text="{Binding Pruefwert, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Background="White" HorizontalAlignment="Stretch" Grid.Column="0" Grid.ColumnSpan="2" TextChanged="TextBox_TextChanged"/> <Button Content="NR" Background="DarkGray" Click="NRButton_Click" HorizontalAlignment="Stretch" Grid.Column="2"/> </Grid> </DataTemplate> </DataGrid.Resources> <DataGrid.Columns> <DataGridTextColumn Header="Pruefpunkt" Binding="{Binding Pruefpunkt}" Width="1*"/> <!-- Wrapping Text Column --> <DataGridTemplateColumn Header="Content" Width="10*"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Content}" TextWrapping="Wrap" Background="{Binding ContentBackground}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <!-- Conditional Column for Buttons or TextBox --> <DataGridTemplateColumn Header="Actions" Width="3*"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ContentControl> <ContentControl.Style> <Style TargetType="ContentControl"> <Style.Triggers> <DataTrigger Binding="{Binding Type}" Value="button"> <Setter Property="ContentTemplate" Value="{StaticResource ButtonTemplate}" /> </DataTrigger> <DataTrigger Binding="{Binding Type}" Value="text"> <Setter Property="ContentTemplate" Value="{StaticResource TextBoxTemplate}" /> </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> </ContentControl> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTextColumn Header="Pruefpunkt" Binding="{Binding Pruefwert}" Width="1*"/> </DataGrid.Columns> </DataGrid> 我遇到的问题是,Pruefwert 的值在文本框中不可见。对于数据模板文本框模板 我在末尾添加了一个额外的 DataGridTextColumn,具有相同的 DataBinding,这里的值是可见的,没有任何问题。所以数据模板肯定存在一些绑定问题。而且我没有收到任何绑定错误。 为了应用 DataTemplate,首先必须有某个要应用它的对象。对于 ContentTemplate,此对象将是 Content 属性的值。但你这个属性里什么都没有,它被设置为null。 参见示例: <StackPanel> <FrameworkElement.Resources> <DataTemplate x:Key="point.template" DataType="Point"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding X}" Margin="5"/> <TextBlock Text="{Binding Y}" Margin="5"/> </StackPanel> </DataTemplate> </FrameworkElement.Resources> <FrameworkElement.DataContext> <Point X="123" Y="456"/> </FrameworkElement.DataContext> <ContentControl ContentTemplate="{DynamicResource point.template}"/> <ContentControl ContentTemplate="{DynamicResource point.template}" Content="{Binding}"/> </StackPanel>

回答 1 投票 0

WPF - 将视图模型列表重置回初始状态

我试图在视图模型中维护相同类型列表的两个副本。一个列表是视图模型绑定到的基本模型的属性,另一个列表是视图的属性

回答 1 投票 0

从数据网格 ItemSources 获取类属性

我如何获取 DataGrid 的 ItemSource 类的所有属性。 我有一些类作为项目源分配给 DataGrid 控件。 我想访问我的类的属性

回答 1 投票 0

如果在使用 avalondock LayoutPanel 时切换菜单屏幕后 Tap 被重置,如何禁用重置? C#

我无法向您展示完整的代码。 我正在开发的程序在用户界面上有一些按钮, 这是一个当您按下按钮时将 UI 下的屏幕切换到另一个屏幕的程序。 在...

回答 1 投票 0

网格上的可见性绑定不起作用

我正在尝试绑定网格的可见性,但无法这样做。 //ViewModel类 私人可见性_isVisiblePane = Visibility.Hidden; 公共可见性 isVisiblePane { 得到...

回答 4 投票 0

Command<int> CanExecute 在 WPF 视图中无法正常工作

我目前正在处理 WPF 屏幕的视图,其中我们遇到了 Command 或 Command 类型的命令的异常问题。 在我们的应用程序中,有一个带有

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.