wpf 相关问题

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

WPF ContentControl 模板不会显示内容

又到了尝试在WPF中实现琐碎部分的时候了。 又到了尝试在 WPF 中实现琐碎部分的时候了。 <Window.Resources> <ControlTemplate x:Key="GroupBoxTemplate"> <GroupBox Header="ASD"> <ContentPresenter/> </GroupBox> </ControlTemplate> </Window.Resources> <Grid> <ContentControl Template="{StaticResource GroupBoxTemplate}" > <Button Content="test"/> </ContentControl> </Grid> 在上面的示例中,我希望按钮显示在模板化组框中。但我看到的只是一个组框,内容演示者没有显示任何内容。我不知道为什么。 我做错了什么? 您忘记指定 ControlTemplate 的 TargetType: <ControlTemplate x:Key="GroupBoxTemplate" TargetType="ContentControl"> <GroupBox Header="ASD"> <ContentPresenter/> </GroupBox> </ControlTemplate>

回答 1 投票 0

有没有办法可以使用这个依赖属性? WPF C#

我试图在自定义控件中设置 SKQuantitySpinEdit 父类的增量属性,但无法这样做! ControlTemplate spinOptLegQuantityTemplate = (ControlTemplate)(grdMultiF...

回答 1 投票 0

WPF 在 Canvas 上更新图元时防止闪烁

我有一个应用程序,我使用 WPF Canvas 基于视图模型中的对象列表来显示图元(例如多边形、折线等)。 当我想要更新时,我将子项从

回答 1 投票 0

C# 应用程序在启动时未运行,Windows 10 上的启动影响“未测量”

我有一个小型 WPF 应用程序。我正在尝试在 Windows 启动时启动它 我的C#代码如下: 使用 (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\

回答 2 投票 0

ClickOnce .net7 WPF 应用程序 - 为什么 ActivationUri 为空?

嘿,我正在尝试从另一个带有参数的应用程序启动离线 .net7 clickonce wpf 应用程序。遵循其他几个线程和博客文章,我找到了以下解决方案。让我们调用启动器...

回答 1 投票 0

如何制作围绕窗口的动画边框并且末尾的边框消失? C# WPF

我想要一个围绕窗口的动画边框,所以在窗口中。我希望它看起来像有东西在窗户周围移动,就像这个视频中一样。 我在网上找到了一些代码,我...

回答 1 投票 0

如何将 wpf 组合框绑定到枚举类型并将其显示在组合框中作为定义枚举的描述?

公共枚举 IVAC_VT_SHIFT_SPD { [描述(“16.1299991607666”)] 数据16, [描述(“32.130001068115234”)] 数据32, } public enum IVAC_VT_SHIFT_SPD { [Description("16.1299991607666")] DATA16, [Description("32.130001068115234")] DATA32, } <ComboBox Grid.Row="8" Grid.Column="2" Width="194" Height="40" Margin="0,0,3,0" HorizontalAlignment="Right" VerticalContentAlignment="Center" ItemsSource="{Binding Source={StaticResource IVAC_VT_SHIFT_SPD}}" SelectedValue="{Binding VTShiftSPD}" /> <ObjectDataProvider x:Key="IVAC_VT_SHIFT_SPD" MethodName="GetValues" ObjectType="{x:Type System:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="enm:IVAC_VT_SHIFT_SPD" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> private IVAC_VT_SHIFT_SPD _VTShiftSPD = IVAC_VT_SHIFT_SPD.DATA16; public IVAC_VT_SHIFT_SPD VTShiftSPD { get => _VTShiftSPD; set { _VTShiftSPD = value; OnPropertyChanged(nameof(VTShiftSPD)); } } 我想要的是将枚举类型值绑定到组合框。但是,我希望组合框的内容显示为说明的内容。该选择必须选择为枚举。 有没有不用转换器的方法? 有没有办法只用Xaml来完成它? 我想要一个简单的方法。 我认为您可以非常接近地实现您正在寻找的目标。我确实使用了几个 C# 类来完成它,但这些类将适用于未来的任何枚举,而无需您不断创建其他类或代码来方便在下拉列表中获取描述。 在我的示例中,我能够产生以下结果 public enum IVAC_VT_SHIFT_SPD { [Description("16.1299991607666")] DATA16, [Description("32.130001068115234")] DATA32, } <Window ... xmlns:local="clr-namespace:StackOverflowAnswers.Wpf" ...> <ComboBox x:Name="Combo" ItemsSource="{Binding Source={enums:EnumBindingSource {x:Type enums:IVAC_VT_SHIFT_SPD}}}" DisplayMemberPath="Description" SelectedValuePath="Value" /> 为了促进这一点,我使用了此链接中概述的方法的改编版:https://brianlagunas.com/a-better-way-to-data-bind-enums-in-wpf/。如果您直接遵循这一点,则无需枚举的 ViewModel 即可获得非常相似的结果。然而,我喜欢使用 ViewModel,因为它允许我根据需要调整一些东西,比如添加对图标属性的支持。 在我的示例中,我创建了一个 EnumViewModel 类来容纳组合框中将显示的内容: public class EnumViewModel { public EnumViewModel(Enum value) { Value = value; Description = getDescription(value); } public Enum Value { get; } public string Description { get; } private string getDescription(Enum value) { if (!(value?.GetType().GetField(value?.ToString()) is FieldInfo enumField)) // value is null... return string.Empty; var descriptionAttribute = enumField.GetCustomAttributes(typeof(DescriptionAttribute), false) .OfType<DescriptionAttribute>() .FirstOrDefault(); if (descriptionAttribute is null || string.IsNullOrEmpty(descriptionAttribute.Description)) // description attribute is missing or blank... return value.ToString(); return descriptionAttribute.Description; } } 还有一个 MarkupExtension 允许我直接绑定到它,而不必将其包含在视图模型或后面的代码中。这设置了使用 Source={enums:EnumBindingSource ...} 的能力。 public class EnumBindingSourceExtension : MarkupExtension { private Type _enumType; public Type EnumType { get => this._enumType; set { if (value == this._enumType) return; if (!isEnumType(value)) throw new ArgumentException("Type must be for an Enum."); this._enumType = value; } } private bool isEnumType(Type type) { if (type is null) return false; var enumType = Nullable.GetUnderlyingType(type) ?? type; return enumType.IsEnum; } public EnumBindingSourceExtension() { } public EnumBindingSourceExtension(Type enumType) { this.EnumType = enumType; } public override object ProvideValue(IServiceProvider serviceProvider) { if (this._enumType is null) throw new InvalidOperationException("The EnumType must be specified."); var actualEnumType = Nullable.GetUnderlyingType(this._enumType) ?? this._enumType; var enumValues = Enum.GetValues(actualEnumType) .OfType<Enum>() .Select(x => new EnumViewModel(x)) .ToList(); return enumValues; } } 枚举不应该显示在 UI 中。枚举是整数的简单枚举,其中每个值都有一个关联的名称。 您的场景根本超出了 enum 类型的意图。 如果您想定义一组常量,其中每个常量携带数据,那么您应该定义一个类型(class 或 struct)。这也将为您在视图中呈现数据提供更大的灵活性,而无需转换器和反射的额外开销。您最终会得到更干净、自然/直观的代码。在您的场景中使用 enum 并不优雅,也没有任何好处。 enum 必须具有代表性,属性或表中不存储任何元数据。 如果 enum 本身确实有意义,您甚至可以考虑使用此自定义类型来定义 enum 的属性 - 仅当该类型不是 enum 的扩展(用于携带元数据)时才会出现这种情况数据),因为 enum 值必须能够独立,即在没有元数据的情况下使用。 例如,如果您创建一个枚举 Color,其中包含 Color.Red 等值,并且如果没有实际的红色值,则无法使用这些值,那么 Color.Red 不应该是枚举,而应该是 class 或 struct 能够定义该元数据。 建议的解决方案如下所示: VTShiftSPD.cs // TODO::Implement IEquatable<VTShiftSPD> (don't forget to override GetHashCode) public readonly struct VTShiftSPD : IEquatable<VTShiftSPD> { public const string Data16 = "DATA16"; public const string Data32 = "DATA32"; public VTShiftSPD(string id, double value) { this.Id = id; this.Value = value; } public string Id { get; } public double Value { get; } } 您可以使用和比较它,例如如下(没有任何反映!): static Main() { var vTShiftSPD = new VTShiftSPD(VTShiftSPD.Data16, 16.1299991607666); Evaluate(vTShiftSPD); } private static void Evaluate(VTShiftSPD vTShiftSPD) { switch (vTShiftSPD.Id) { case VTShiftSPD.Data16: break; case VTShiftSPD.Data32: break; default: break; } } 如果从 VTShiftSPD 创建的实例集不是开放集,您甚至可以将它们本身定义为常量: VTShiftSPDs.cs static class VTShiftSPDs { public static readonly VTShiftSPD Spd16 = new VTShiftSPD(VTShiftSPD.Data16, 16.1299991607666); public static readonly VTShiftSPD Spd32 = new VTShiftSPD(VTShiftSPD.Data32, 32.130001068115234); } 并按如下方式使用它: static Main() { Evaluate(VTShiftSPDs.Spd16); } private static void Evaluate(VTShiftSPD vTShiftSPD) { switch (vTShiftSPD.Id) { case VTShiftSPD.Data16: break; case VTShiftSPD.Data32: break; default: break; } } 并优雅(且高效)地使用它来填充数据视图: MainWindow.xaml.cs // The data source for the ComboBox.ItemsSource public ObservableCollection<VTShiftSPD> VTShiftSPDs { get; } = new ObservableCollection<VTShiftSPD> { VTShiftSPDs.Spd16, VTShiftSPDs.Spd32, }; MainWindow.xaml <Window> <StackPanel> <ComboBox x:Name="VTShiftSPDSelector" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType Window}, Path=VTShiftSPDs}" DisplayMemberPath="Value" /> <Stackpanel DataContext="{Binding Elementname=VTShiftSPDSelector, Path=SelectedItem}> <TextBlock x:Name="Id" Text{Binding Id}" /> <!-- Displays e.g. DATA16 --> <TextBlock x:Name="Value" Text{Binding Value}" /> <!-- Displays e.g. 16.1299991607666 --> </StackPanel> </StackPanel> </Window>

回答 2 投票 0

如何在 WPF 中追踪文本输入中随机掉落的按键

症状 我有一个 C# + WPF 应用程序,它具有复杂的 XAML 场景。应用程序中的某些按钮将打开一个带有文本框的模式对话框,提示用户输入一些文本。我观察到

回答 1 投票 0

C# WPF:将 UserControl 放入 DataGridRow

我正在用 C# 创建一个 WPF 应用程序。在我的窗口中有一个数据网格。网格中有 2 列。第一列仅包含字符串。在第二列中,我想显示我创建的用户控件...

回答 3 投票 0

WPF 交替 DataGrid 行背景颜色优先于动画颜色

我有一个 WPF DataGrid,其行将闪烁红色以响应从服务器接收到的事件。这按预期工作,直到我添加浅灰色的交替颜色。不是闪烁红色,而是...

wpf
回答 1 投票 0

以编程方式清除 WPF ComboBox 中的选择

我在 WPF 中有一个 ComboBox,其 ItemsSource 以编程方式设置为列表。我将如何清除事件处理程序中的选择?我试过了: comboBox.SelectedIndex = -1; 组合框。

回答 7 投票 0

WPF 弹出窗口出现在其他桌面窗口上方,如何仅出现在 WPF 主窗口顶部?

我有一个带有网格的 WPF 主窗口,并且我添加了一个 WPF 弹出窗口,以在单击按钮时询问用户额外信息。但问题是,当其他桌面窗口移动到...

回答 3 投票 0

将选定的行从 WPF DataGrid 发送到 SQL 表时遇到困难

我的 WPF 应用程序遇到一个问题,我需要将选定的行从 DataGrid 发送到 SQL 数据库表。尽管实现了必要的逻辑,但负责处理的方法......

回答 1 投票 0

如何设置TextBlock中的制表符宽度?

我想减少 TextBlock 中制表符的宽度。制表符相当于大约 8 个字符。我想减少到大约 4 个空格。 TextBlock 文本块 = 新的 TextBloc...

回答 1 投票 0

WPF 如何允许我的 ControlTemplate 使用现有的 NavigationService?

我有一个菜单 ControlTemplate,我想将其用于我的所有页面。 ControlTemplate 的函数调用需要使用属于我的 NavigationWindow 的 NavigationService。嗬...

回答 1 投票 0

TreeView 根据子项选择父复选框 - WPF MVVM

我是 WPF 新手。我找到了一些示例,并在 C# WPF Mvvm 中整理了一个树视图示例。我根据父母的选择选中或取消选中孩子的复选框。我不知道如何加入...

回答 1 投票 0

你能描述一下我的WPF项目中有什么不正确的地方吗&

我是 WPF 新手。这是我的主窗口代码 我是 WPF 新手。这是我的 MainWindow 代码 <StackPanel Grid.Row="1"> <RadioButton Content="Главная" Height="50" Foreground="White" FontSize="14" Style="{StaticResource MenuButtonTheme}" IsChecked="True" Command="{Binding ChangeToHome}"/> <RadioButton Content="Добавить раскраску" Height="50" Foreground="White" FontSize="14" Style="{StaticResource MenuButtonTheme}" Command="{Binding ChangeToDiscovery}"/> </StackPanel> 以及 MainViewModel.cs 的代码 private void ChangeToHome (object value) { CurrentView = HomeVM; MessageBox.Show("Now in home", "alert", MessageBoxButton.OK, MessageBoxImage.Information); } private void ChangeToDiscovery (object value) { CurrentView = DiscoveryVM; MessageBox.Show("Now in Discovery", "alert", MessageBoxButton.OK, MessageBoxImage.Information); } private bool CanChangeView(object value) { return true; } public MainViewModel() { HomeVM = new HomeViewModel(); DiscoveryVM = new DiscoveryViewModel(); CurrentView = HomeVM; HomeViewCommand = new RelayCommand(ChangeToHome, CanChangeView); DiscoveryViewCommand = new RelayCommand(ChangeToDiscovery, CanChangeView); } 我没有收到任何错误,但没有任何效果。当我单击单选按钮时,没有消息,也不会改变视图。 引起我注意的第一件事是命令绑定到 ViewModel 中声明的错误属性。 可能还有其他错误,但要理解这一点,您需要更完整的代码片段。包括如何实例化 ViewModel 并将其传递给数据上下文。

回答 1 投票 0

LibVlcSharp SetVideoCallbacks(Lock, null, Display) 在从 IP 摄像机播放流时没有被调用

我正在尝试开发一个应用程序,该应用程序可以从 IP 摄像机流式传输视频,并处理来自这些 IP 摄像机的一些帧。我已经使用 SetVideoCallbacks(Lock, null, Di...

回答 1 投票 0

WPF 中的可编辑数据网格

我有一个程序,需要用户在 DataGrid 中输入数据。我虽然设置“CanUserAddRows”的简单行为足以让用户添加新行,但似乎不会......

回答 2 投票 0

如何更改wpf中datagrid所选项目的背景颜色?

所以这是我的数据网格,但是如果我在数据网格中选择一个项目,它的颜色不会改变。触发器不起作用。 DataGrid x:Name="dgAdatok" ColumnWidth="*" MinColumnWidth="...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.