Windows Presentation Foundation或WPF是用于在基于Windows的应用程序中呈现用户界面的子系统。
当 MenuItem 的 ItemContainerStyle 具有相同属性时,WPF Style 的属性无法应用于 MenuItem
在我看来,我在ContextMenu下定义了2个MenuItem。 “菜单 1”和“菜单 2”都设置为相同的样式,定义背景和前景色。 唯一的区别是...
如何更改 Livecharts wpf c# 中的 x 轴标签
我正在尝试更改 Livecharts 中组合框事件的 x 轴。 我使用 c# wpf。 y 轴一切正常,但我还没有找到一种方法来交换 x 轴。 我一直在寻找...
我在我的 C# WPF MVVM 应用程序中创建了一个 UserControl。当我在组合框过滤产品显示中输入时,假设下拉列表中显示 8 个过滤产品,如果我尝试,问题从这里开始...
有人有一个关于如何深度克隆 WPF 对象、保留数据绑定的好例子吗? 标记的答案是第一部分。 第二部分是您必须创建一个 ExpressionConverter 并注入...
大约几天前,我们运行我们的WPF应用程序,我们中的一些人(在几位开发人员的计算机上)发现很多控件在聚焦时有虚线边框,如下所示: 外部控制我...
我正在尝试打开包含 WebView2 控件的 WPF 窗口,以便我可以将 OpenID Connect 身份验证添加到现有的 C++ CLI 应用程序。 我们正在使用 https://github.com/IdentityModel/
在我的 VSTO Excel Addin 应用程序中,当用户尝试关闭任何打开的工作簿时,我希望将 Systems.Window.MessageBox 显示为 TopMost 窗口 - 就像尝试关闭工作簿时 Excel 所做的那样...
我正在尝试创建一个具有按钮外观的复选框。当我设置 ToggleButton 的内容时,它会更改复选框文本,但是当我更改 IsChecked 时,它不会在复选框中更新。嗬...
我在 wpf xaml 中有一个用户控件,它在网格中显示图像。但我无法使用鼠标滚轮滚动,并且滚动条不随鼠标滚轮移动。 我可以移动滚动条...
我在 WPF 应用程序中使用 Ribbon 控件有什么问题?
我添加了对 RibbonControlsLibrary.dll 的引用。 v4.0.0.11019。然后,我的主窗口中有名称空间声明: xmlns:r="clr-命名空间:Microsoft.Windows.Controls.Ribbon;程序集=
我使用LeadTools进行扫描。 我想将扫描图像转换为字节。 void twainSession_AcquirePage(对象发送者, TwainAcquirePageEventArgs e) { ScanImage = e.Image.Clone(); 图片来源
我一直在从事一些项目,但我似乎找不到一种方法来隐藏按下下图所示的按钮时出现的网格线 有没有办法隐藏网格线?我不
我想告诉WPF:“如果TextBlock不包含数据,那么就不要显示它。” 使用简单触发器的 TRY #1 会产生错误“‘Text’成员无效,因为它没有限定类型名称...
对象更改时 ObservableCollection/INotifyPropertyChange 如何工作
我遇到一种情况,在一个视图模型中,对象的某些属性被更新。在另一个视图模型中,我订阅消息,然后使用这个新对象更新集合,例如:
我的图像处理全部是用C++进行的。之前使用MFC,现在正在考虑升级到WPF。 WPF 端主要是用户界面,我将图像指针从非托管传递到托管以进行显示。我发现...
Caliburn.Micro 如何编写一个提取动作到资源以便其他类似元素可以重用它?
我正在WPF中编写一个简单的计算器程序,并使用Caliburn.Micro MVVM框架。我在XMAL中定义了UI,如下所示 我正在WPF中编写一个简单的计算器程序,并使用Caliburn.Micro MVVM框架。我在XMAL中定义了这样的UI <Button Name="Clear" Grid.Row="0" Grid.Column="0" Style="{StaticResource grey_button}" Content="C"/> <Button Grid.Row="0" Grid.Column="1" Style="{StaticResource grey_button}" Content="+/-"/> <Button Name="Remainder" Grid.Row="0" Grid.Column="2" Style="{StaticResource grey_button}" Content="%"/> <Button Name="Division" Grid.Row="0" Grid.Column="3" Style="{StaticResource blue_button}" Content="÷"/> <Button Name="Seven" Grid.Row="1" Grid.Column="0" Style="{StaticResource white_button}" Content="7"/> <Button Name="Eight" Grid.Row="1" Grid.Column="1" Style="{StaticResource white_button}" Content="8"/> <Button Name="Nine" Grid.Row="1" Grid.Column="2" Style="{StaticResource white_button}" Content="9"/> <Button Name="Multiply" Grid.Row="1" Grid.Column="3" Style="{StaticResource blue_button}" Content="x"/> <Button Name="Four" Grid.Row="2" Grid.Column="0" Style="{StaticResource white_button}" Content="4"/> <Button Name="Five" Grid.Row="2" Grid.Column="1" Style="{StaticResource white_button}" Content="5"/> <Button Name="Six" Grid.Row="2" Grid.Column="2" Style="{StaticResource white_button}" Content="6"/> <Button Name="Plus" Grid.Row="2" Grid.Column="3" Style="{StaticResource blue_button}" Content="+"/> <Button Name="One" Grid.Row="3" Grid.Column="0" Style="{StaticResource white_button}" Content="1"> </Button> <Button Name="Two" Grid.Row="3" Grid.Column="1" Style="{StaticResource white_button}" Content="2"/> <Button Name="Three" Grid.Row="3" Grid.Column="2" Style="{StaticResource white_button}" Content="3"/> <Button Name="Subtract" Grid.Row="3" Grid.Column="3" Style="{StaticResource blue_button}" Content="-" FontSize="25"/> <Button Name="Dot" Grid.Row="4" Grid.Column="0" Style="{StaticResource white_button}" Content="·"/> <Button Name="Zero" Grid.Row="4" Grid.Column="1" Style="{StaticResource white_button}" Content="0"/> <Button Name="Backward" Grid.Row="4" Grid.Column="2" Style="{StaticResource white_button}" Content="x"/> <Button Name="Equal" Grid.Row="4" Grid.Column="3" Style="{StaticResource blue_button}" Content="="/> 通过这种方式,我实际上可以处理点击操作,因为 Caliburn 命名 Conversion,因为我在 ViewModel 中定义了 One,Two,Three .... 方法 public void Zero() { Input += "0"; } public void One(string content) { Input += "1"; } public void Two() { Input += "2"; } public void Three() { Input += "3"; } public void Four() { Input += "4"; } 现在我想用一种方法处理所有输入动作 public void Input(string content) { Input+=content; } 所以我在视图顶部将 Microsoft.Xaml.Behaviors 导入为命名空间 b,并在我的按钮之一中定义了以下事件 <Button Name="One" Grid.Row="3" Grid.Column="0" Style="{StaticResource white_button}" Content="1"> <b:Interaction.Triggers> <b:EventTrigger EventName="Click"> <cal:ActionMessage MethodName="One"> <cal:Parameter Value="{Binding ElementName=One, Path=Content}"></cal:Parameter> </cal:ActionMessage> </b:EventTrigger> </b:Interaction.Triggers> </Button> 问题: 我想重用有关触发器的代码,我知道我应该提取这个触发器逻辑来资源,我可以这样使用它: <Button Name="One" Style="{StaticResource blue_button}" Content="1" Action={StaticResource InputAction,Parameter=Binding{ElementName=One Path=Content}}/> <Button Name="Two" Style="{StaticResource blue_button}" Content="2" Action={StaticResource InputAction,Parameter=Binding{ElementName=Two Path=Content}}/> <Button Name="Three" Style="{StaticResource blue_button}" Content="3" Action={StaticResource InputAction,Parameter=Binding{ElementName=Three Path=Content}}/> ... <Button Name="Plus" Style="{StaticResource blue_button}" Content="+" Action={StaticResource InputAction,Parameter=Binding{ElementName=Plus Path=Content}}/> 设置按钮动作的主要方式是使用命令。在 WPF 上具有 GUI 的典型解决方案中,通常会实现 MVVM 模式。在这种情况下,命令是在 ViewModel 中设置的。您可以将参数传递给命令以进行进一步处理。我将以非常简化的形式向您展示 ViewModel 还执行 Model 功能的实现。 该示例使用我的 ViewModelBase 实现。您可以将其替换为您方便的任何内容。或者,如果您对我的实现感兴趣,可以从此存储库中获取它:https://github.com/INexteR/NewTrade/tree/main/NewTradeSln/ViewModels using Simplified; using System.Collections.ObjectModel; namespace Core2024.SO.huojian.question78746674 { public class CalculatorViewModel : ViewModelBase { public static ReadOnlyCollection<string> ButtonNames { get; } = Array.AsReadOnly("C, +/-, %, ÷, ✖, +, -, ., =, 🠔, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...Any Names" .Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)); public CalculatorViewModel() { DisplayedValue = "0"; } public RelayCommand CalculatorCommand => GetCommand<string>(CalculatorExecute, CalculatorCanExecute); private bool CalculatorCanExecute(string parameter) => ButtonNames.Contains(parameter); public string DisplayedValue { get => Get<string>(); private set => Set(value); } private void CalculatorExecute(string parameter) { switch (parameter) { case "0": case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": string value = DisplayedValue; if (DisplayedValue == "0") value = string.Empty; DisplayedValue = value + parameter; break; case "C": DisplayedValue = "0"; break; case "+/-": if (DisplayedValue != "0") { if (DisplayedValue[0] == '-') DisplayedValue = DisplayedValue.Substring(1); else DisplayedValue = "-" + DisplayedValue; } break; // Logic of other buttons default: break; } } } } <Window x:Class="Core2024.SO.huojian.question78746674.CalculatorWindow" 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:Core2024.SO.huojian.question78746674" mc:Ignorable="d" Title="CalculatorWindow" Height="450" Width="800" DataContext="{DynamicResource vm}"> <Window.Resources> <local:CalculatorViewModel x:Key="vm"/> <Style x:Key="base" TargetType="FrameworkElement"> <Setter Property="Margin" Value="5"/> </Style> <Style x:Key="button.command" TargetType="Button"> <Setter Property="CommandParameter" Value="{Binding Content, RelativeSource={RelativeSource Self}}"/> <Setter Property="Command" Value="{Binding CalculatorCommand}"/> <Setter Property="Padding" Value="15 5"/> </Style> <Style x:Key="button.white_button" TargetType="Button" BasedOn="{StaticResource button.command}"> <Setter Property="Background" Value="White"/> <Setter Property="Foreground" Value="Blue"/> </Style> <Style x:Key="button.blue_button" TargetType="Button" BasedOn="{StaticResource button.command}"> <Setter Property="Background" Value="Blue"/> <Setter Property="Foreground" Value="White"/> </Style> </Window.Resources> <StackPanel> <TextBox Text="{Binding DisplayedValue, Mode=OneWay}" Style="{StaticResource base}" IsReadOnly="True" HorizontalContentAlignment="Right" Padding="15 5"/> <UniformGrid Columns="4"> <Button Style="{StaticResource button.blue_button}" Content="C"/> <Button Style="{StaticResource button.blue_button}" Content="+/-"/> <Button Style="{StaticResource button.blue_button}" Content="%"/> <Button Style="{StaticResource button.blue_button}" Content="÷"/> <Button Style="{StaticResource button.white_button}" Content="7"/> <Button Style="{StaticResource button.white_button}" Content="8"/> <Button Style="{StaticResource button.white_button}" Content="9"/> <Button Style="{StaticResource button.blue_button}" Content="✖"/> <Button Style="{StaticResource button.white_button}" Content="4"/> <Button Style="{StaticResource button.white_button}" Content="5"/> <Button Style="{StaticResource button.white_button}" Content="6"/> <Button Style="{StaticResource button.blue_button}" Content="+"/> <Button Style="{StaticResource button.white_button}" Content="1"/> <Button Style="{StaticResource button.white_button}" Content="2"/> <Button Style="{StaticResource button.white_button}" Content="3"/> <Button Style="{StaticResource button.blue_button}" Content="-" FontSize="25"/> <Button Style="{StaticResource button.white_button}" Content="·"/> <Button Style="{StaticResource button.white_button}" Content="0"/> <Button Style="{StaticResource button.blue_button}" Content="🠔"/> <Button Style="{StaticResource button.blue_button}" Content="="/> </UniformGrid> </StackPanel> </Window>
我想实现一些带有循环图标和占位符的自定义搜索文本框。因此,我创建了一个自定义控制模板,其中有用于循环图标的 TextBlock(我使用了特定的一些符号...
请耐心等待我提出挑战。我的目标是,我想使用具有水印支持和密码字符支持的文本框。这就是目标。到目前为止,到达那里有点喜剧,...
我正在使用 dnp3 nuget 包,我想在 WPF 中实现它,我通过参考此示例来实现它 https://github.com/stepfunc/dnp3/blob/master/ffi/bindings/ dotnet/示例/m...