Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。
关闭 RecognizesAccessKey 的 WPF DataGrid
我有一个非常基本的 WPF 应用程序,并附有 MS SQL 服务器作为数据源。我的数据网格声明如下: 我有一个非常基本的 WPF 应用程序,并附有 MS SQL 服务器作为数据源。我的数据网格声明如下: <DataGrid HorizontalAlignment="Left" Margin="10,88,0,0" VerticalAlignment="Top" Height="456" Width="1018" ItemsSource="{Binding}" /> 当我运行应用程序时,我看到数据从数据库加载到网格中,但列标题看起来很奇怪。每个最初包含下划线的标题都删除了该下划线:some_title 变为 sometitle。 我发现这是因为下划线被识别为控制符号,将下一个符号变成助记符。 如何禁用此行为? 我发现如果你将单下划线加倍,即 some__title 而不是 some_title,则可以绕过此行为。但由于我的数据源是外部数据库,我无法影响它。或者也许用转换器? 我认为最好的方法是将属性RecognizesAccessKey转为false,但不幸的是它无法访问。 我是 WPF 新手,感谢您的帮助! 附注她是史努比的照片(如果有帮助的话) 编辑:我的目标框架是.net 4.5 尽管这是一个老问题,但我找到了解决方案。它可能对某人有帮助。 <DataGrid HorizontalAlignment="Left" Margin="10,88,0,0" VerticalAlignment="Top" Height="456" Width="1018" ItemsSource="{Binding}" > <DataGrid.ColumnHeaderStyle> <Style TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="DataGridColumnHeader"> <Border> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="False" /> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </DataGrid.ColumnHeaderStyle> </DataGrid> 我能想到的最佳解决方案是拦截 DataGrid 事件 AutoGeneratingColumn 并将所有下划线替换为两个下划线,如下所示: private void DataGrid_AutoGeneratingColumn_1(object sender, DataGridAutoGeneratingColumnEventArgs e) { string header = e.Column.Header.ToString(); // Replace all underscores with two underscores, to prevent AccessKey handling e.Column.Header = header.Replace("_", "__"); } 根据我的理解,(遗憾的是)不可能在不重新定义整个控制模板的情况下覆盖底层 RecognizesAccessKey 的 ContentPresenter 的值。 请参阅 msdn 论坛上的此主题:如何在标签上设置 RecognizesAccessKey 而不影响其他参数?. 您可以使用自定义列,当您使用自定义列时,您可以根据需要定义列标题。 要添加到已接受的答案中,如果您想保留数据网格的原始样式,请按如下所示操作,并将 ContentPresenter 的 RecognizeAccessKey 更改为 False。 <Style TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> <Grid> <Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}"> <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="False" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </Themes:DataGridHeaderBorder> <Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left"> <Thumb.Style> <Style TargetType="{x:Type Thumb}"> <Setter Property="Width" Value="8"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="Cursor" Value="SizeWE"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Thumb}"> <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/> </ControlTemplate> </Setter.Value> </Setter> </Style> </Thumb.Style> </Thumb> <Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right"> <Thumb.Style> <Style TargetType="{x:Type Thumb}"> <Setter Property="Width" Value="8"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="Cursor" Value="SizeWE"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Thumb}"> <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/> </ControlTemplate> </Setter.Value> </Setter> </Style> </Thumb.Style> </Thumb> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> 通过 XAML,您可以更改 DataGridColumnHeader 行为以禁用将“_”解释为特殊字符(以便保留它): <DataGrid.Resources> <Style TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate > <TextBlock Text="{Binding}" /> </DataTemplate> </Setter.Value> </Setter> </Style> </DataGrid.Resources>
我只是想知道是否可以使用纯 XAML 对网格的高度进行动画处理?我看了这个教程: http://windowsclient.net/learn/video.aspx?v=70654 但似乎有一个...
WPF - 根据 IsEnabled 属性更改按钮背景的样式
我为我的按钮做了这个样式,它加载得很好 但我现在尝试根据 IsEnabled 属性设置不同的背景,但这似乎不起作用 我为我的按钮制作了这种样式,并且加载得很好 但我现在尝试根据 IsEnabled 属性设置不同的背景,但这似乎不起作用 <SolidColorBrush x:Key="Color" Color="#FFADD2CC"/> <SolidColorBrush x:Key="Color_Disabled" Color="#FF8D9B98"/> <Style x:Key="ButtonStyle" TargetType="Button"> <Setter Property="Height" Value="32"/> <Setter Property="Padding" Value="8,4,8,4"/> <Setter Property="VerticalAlignment" Value="Center"/> <Setter Property="FontWeight" Value="Bold"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Border Background="{TemplateBinding Background}"> <Grid> <Rectangle x:Name="BackgroundRect" Fill="{StaticResource Color}" RadiusX="2" RadiusY="2"/> <ContentPresenter Margin="{TemplateBinding Padding}" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </Border> <ControlTemplate.Triggers> <!-- DataTrigger to change the background color based on IsEnabled property --> <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource TemplatedParent}}" Value="True"> <Setter TargetName="BackgroundRect" Property="Fill" Value="{StaticResource Color}"/> </DataTrigger> <DataTrigger Binding="{Binding IsEnabled, RelativeSource={RelativeSource TemplatedParent}}" Value="False"> <Setter TargetName="BackgroundRect" Property="Fill" Value="{StaticResource Color_Disabled}"/> </DataTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> 我在我的主模板中使用它,就像这样 <Button Grid.Column="1" Content="Button Text" ToolTip="Some tooltip" Click="OnClick" Style="{StaticResource ButtonStyle}" Margin="0,0,4,0" IsEnabled="false"/> 我希望按钮根据 IsEnabled 值具有不同的颜色 感谢您的帮助 您只需要在 Trigger 属性上设置一个普通的 IsEnabled 即可设置按钮的 Background。 ControlTemplate 中的 Grid 和 Rectangle 是多余的。 <SolidColorBrush x:Key="BackgroundEnabled" Color="#FFADD2CC"/> <SolidColorBrush x:Key="BackgroundDisabled" Color="#FF8D9B98"/> <Style x:Key="ButtonStyle" TargetType="Button"> ... <Setter Property="Background" Value="{StaticResource BackgroundEnabled}"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Border Background="{TemplateBinding Background}"> <ContentPresenter Margin="{TemplateBinding Padding}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </Border> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Background" Value="{StaticResource BackgroundDisabled}"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
目标是获取以编程方式填充的 ComboBox 的当前值。 在以下 C# 代码片段中,ComboBox 的 ItemsSource 填充有从外部获取的数据
对于WPF TextBox,我需要在鼠标单击它的情况下选择它的所有内容(在“现实生活”中,它将在触摸板显示器上触摸)。 为了进行测试,我创建了简单的项目并检查解决方案...
我正在编写一个WPF应用程序,它有很多不同的控件,每个控件都有自己的工具提示。尽管工具提示很有用,但其中一些很长并且很碍事。 我想成为有能力的...
我希望在 WPF 应用程序中的 DataGrid 中有一个具有透明背景的列。标题和单元格本身需要透明,但其中的内容不透明,这将是......
WPF 和 VB.Net 倒计时器 - 未调用 Tick 事件
我想在按下按钮时使用倒计时器来更新 wpf 形式的文本块。 目前看来我的 DispatcherTimer 的 tick 事件没有被调用。 这是实体...
DataGrid 中的 CheckBox 不会触发绑定源中的属性更改
我有一个显示项目列表的 DataGrid 每行都有一个复选框,应更改相应数据类中的布尔字段 我预计字段值会发生变化并且
我正在尝试用纯 C# 打开一个窗口。 为此,我创建了一个窗口构造函数(SGFWindow),从 System.Windows 扩展 Window 类: 命名空间SGF { 公共部分类
WPF - INotifyPropertyChanged 到父数据 - 不会在从复选框更改值时触发
我有一个显示项目列表的 DataGrid 每行都有一个复选框,应更改相应数据类中的布尔字段 我预计字段值会发生变化并且
每当在 wpf 中滚动任何一个 ScrollViewer 时,两个 ScrollViewer 就会同步滚动
我已经浏览了该主题: 将两个 VerticalScrollBar 相互绑定 它几乎帮助实现了目标,但仍然缺少一些东西。就是向左移动滚动条-...
我们有一个人可以拥有多种技能(力量、智力和运气)。在我们的 WPF 应用程序中,我们希望将这些技能绑定到复选框。当一个人的列表中包含这些技能时,那么...
如何让WebView2适合并充满Window(自适应大小效果或全屏)?
我尝试设置 HorizontalAlignment="Stretch" 和 VerticalAlignment="Stretch" 但这是行不通的。 我尝试设置 HorizontalAlignment="Stretch" 和 VerticalAlignment="Stretch" 但这没有用。 <Window x:Class="Y.Shen12DP.PLCT.WebWidow" 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:local="clr-namespace:Y.Shen12DP.PLCT" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" Title="WebWidow" Width="800" Height="450" mc:Ignorable="d"> <Grid> <wv2:WebView2 HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Source="https://www.microsoft.com/" /> </Grid> </Window> 你能告诉我怎么做吗(自适应尺寸效果或全屏)? 您拥有的代码将确保 WebView2 填充 WPF 窗口。要使其全屏显示,您需要使 WPF 窗口全屏显示,这在 StackOverflow 上的其他地方进行了描述:WPF 应用程序中的全屏。一旦 WPF 窗口全屏,WebView2 也应该全屏。
如何在不裁剪的情况下旋转Windows.UI.Composition.ContainerVisual?
在我的 .NET 4.8 WPF 应用程序中,我有一个带有两个 ContainerVisual 元素的窗口: _rootContainerVisual _containerVisualToRotate 是 _rootContainerVisual 的子级 在多台显示器上显示多个图像...
如何确定特定 TTF 或 OTF 字体支持哪种 Unicode 多代码点表情符号 ZWJ 序列? WPF 可以通过 GlyphTypeface 枚举字体支持的所有单个代码点。
编译器无法将 NuGet 包 DLL 从 WPF 库复制到 WPF 程序
我在 Visual Studio 2022 中对两个 WPF 项目进行了非常简单的设置:一个 WPF 应用程序和一个 WPF 库。 这两个项目都非常简单 - 它们仅包含一个简单的空 WPF 窗口,每个窗口......
自定义用户控件 + MVVM - WPF / Prism 框架
目前,我正在重构一个应用程序,其中有很多重复的 XAML 代码。我想改用自定义用户控件。我做了一个关于如何创建它们的教程,但现在我处于一个点上,...
在WPF中强制App继承与System.Windows.Application不同的类
我想更改App的基类以继承类库中我自己的类。 已经是这样了: 公共部分类App:System.Windows.Application 现在我想把它改成 公开
从 System.Drawing.Bitmap 加载 WPF 位图图像
我有一个 System.Drawing.Bitmap 实例,并希望以 System.Windows.Media.Imaging.BitmapImage 的形式将其提供给我的 WPF 应用程序。 最好的方法是什么?