wpf 相关问题

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

WPF 中的只读切换按钮或复选框

默认情况下,WPF ToggleButton 或 CheckBox(继承 ToggleButton)没有某种 ReadOnly 属性来阻止用户更改值。 一项技术在于设置

回答 1 投票 0

如何正确地将 Popup 绑定到 ToggleButton?

我正在尝试做一些从用户界面级别看来相对简单和逻辑的事情,但我有一个非常烦人的错误。我有一个切换按钮,我试图在

回答 6 投票 0

在列表框项目内有一个可用的组合框

基本上我有一个名为“Exercise”的道具抽象类。它有两个子类“Cardio”和“Strength”,它们具有不同的属性。我现在正在处理的页面的目的是允许

回答 1 投票 0

有没有简单的方法在xaml中指定int值

我想在xaml中设置带有int值的Tag属性。但是在资源中定义 int 然后引用该资源作为绑定对我来说看起来不是一个完美的方法。将字符串值转换为更容易...

回答 5 投票 0

如何在WPF中折叠星形大小的网格列?

通过将宽度设置为自动来获得具有相同宽度的三列。 通过将 Width 设置为 Auto 来获得具有相同宽度的三列。 <Grid x:Name="myGrid"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Label Grid.Row="0" Grid.Column="0">One</Label> <Label Grid.Row="0" Grid.Column="1" x:Name="label1">Two</Label> <Label Grid.Row="0" Grid.Column="2">Three</Label> </Grid> 我想实现的是,如果中间列折叠或隐藏,则其他两列占用剩余空间并获得相等的宽度。 如果我只是因为宽度=“*”而将可见性设置为折叠或隐藏,则其他两列宽度保持不变。 <Label Grid.Row="0" Grid.Column="1" Visibility="Collapsed">Two</Label> 我通过以编程方式将第二列宽度设置为自动来实现所需的功能,但我正在寻找其他一些解决方案(最好是 xaml 方式之一)。 private void Button_Click(object sender, RoutedEventArgs e) { this.myGrid.ColumnDefinitions[1].Width = GridLength.Auto; this.label1.Visibility = Visibility.Collapsed; } 可以使用 UniformGrid 来实现所需的行为。 确保将行数设置为 1。 <UniformGrid Rows="1"> <Label>One</Label> <Label>Two</Label> <Label>Three</Label> </UniformGrid> 其余元素均匀分布。 <UniformGrid Rows="1"> <Label>One</Label> <Label Visibility="Collapsed">Two</Label> <Label>Three</Label> </UniformGrid> 我按照 Rob 的建议添加了 Xaml Binding,如下所示: <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="{Binding MiddleColumnWidth}" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Label Grid.Row="0" Grid.Column="0">One</Label> <Label Grid.Row="0" Grid.Column="1" Visibility="{Binding IsSecondLabelVisible}">Two</Label> <Label Grid.Row="0" Grid.Column="2">Three</Label> xaml 背后的代码: private bool ShowOnlyTwoColumns; private GridLength MiddleColumnWidth { get { if (ShowOnlyTwoColumns) return GridLength.Auto; // Auto collapses the grid column when label is collapsed return new GridLength(1, GridUnitType.Star); } } private Visibility IsSecondLabelVisible { get { return this.ShowOnlyTwoColumns ? Visibility.Collapsed : Visibility.Visible; } } 我迟到了,但我想展示我的解决方案,以防它对任何人有用。 我用这个转换器 public class BooleanToAutoOrStarGridLengthConverter : MarkupExtension, IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is bool isStar) return new GridLength(1, isStar ? GridUnitType.Star : GridUnitType.Auto); return new GridLength(0, GridUnitType.Star); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (value is GridLength gridLength && gridLength.GridUnitType == GridUnitType.Star) return true; return false; } public override object ProvideValue(IServiceProvider serviceProvider) => this; } 在 XAML 中像这样: <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="{Binding IsSecondLabelVisible, Converter={BooleanToAutoOrStarGridLengthConverter}}" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Label Grid.Row="0" Grid.Column="0">One</Label> <Label Grid.Row="0" Grid.Column="1" Visibility="{Binding IsSecondLabelVisible}">Two</Label> <Label Grid.Row="0" Grid.Column="2">Three</Label> 我最终得到了类似于h.m.i.13答案的想法。我创建了一个通用转换器,它隐藏列/行或使用特定的网格长度值显示它。 优点是它可以处理更复杂的网格,其中并非每行都有简单的一星长度。 public class BooleanToGridLengthConverter : IValueConverter { private readonly static GridLength DefaultLength = new GridLength(0, GridUnitType.Pixel); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value is not bool booleanValue || parameter is not string stringParameter) { return DefaultLength; } if (booleanValue && TryParseGridLength(stringParameter, out var gridLength)) { return gridLength; } return DefaultLength; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } private static bool TryParseGridLength(string stringValue, out GridLength gridLength) { gridLength = DefaultLength; if (stringValue.Equals("Auto", StringComparison.OrdinalIgnoreCase)) { gridLength = GridLength.Auto; return true; } if (stringValue.EndsWith("*")) { double starCount = 1; if (stringValue.Length > 1 && !double.TryParse(stringValue.AsSpan(0, stringValue.Length - 1), out starCount)) { return false; } gridLength = new GridLength(starCount, GridUnitType.Star); return true; } if (double.TryParse(stringValue, out var pixelValue)) { gridLength = new GridLength(pixelValue, GridUnitType.Pixel); return true; } return false; } }

回答 4 投票 0

GridViewColumn 调整大小不适用于 UserControl

我有一个 WPF ListView,它使用 GridViewColumns 作为其各个列。 我有一个 WPF ListView,它使用 GridViewColumns 作为其各个列。 <ListView Name="LvArticles" Grid.Column="0" Grid.Row="3" MinWidth="800" ItemsSource="{Binding SearchResults}" SelectedItem="{Binding SearchResultsSelectedItem}" IsSynchronizedWithCurrentItem="True" Margin="3"> <ListView.View> <GridView> <GridView.Columns> <GridViewColumn Header="Distance" DisplayMemberBinding="{Binding Distance}"></GridViewColumn> <GridViewColumn Header="Ident" DisplayMemberBinding="{Binding Article.Ident}"></GridViewColumn> <GridViewColumn Header="Beschreibung"> <GridViewColumn.CellTemplate> <DataTemplate DataType="{x:Type models:ArticleSearchResult}"> <helpers:FormattedTextControl Text="{Binding Article.DescriptionLong2}" HighlightText="{Binding OriginalMpn}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <!--<GridViewColumn Header="Beschreibung" DisplayMemberBinding="{Binding Article.DescriptionLong2}"></GridViewColumn>--> </GridView.Columns> </GridView> </ListView.View> </ListView> 如您所见,为了进行调试,我必须使用 GridViewColumns(当前已注释掉其中一个)来显示文本 Article.DescriptionLong2。 每当结果集发生变化时,我都会使用以下代码调整所有列的大小: c.Width = 0; //set it to no width c.Width = double.NaN; //resize it automatically 只要我使用 DisplayMemberBinding 行,这就有效。 现在我有一个自定义用户控件,基本上是这样构建的 <UserControl x:Class="GrafBomBuilder.Helpers.FormattedTextControl" 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" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" > <Grid Name="Stack" HorizontalAlignment="Stretch"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Text="{Binding Part1}" /> <TextBlock Grid.Column="1" Text="{Binding Part2}" Foreground="Red" /> <TextBlock Grid.Column="2" Text="{Binding Part3}" /> </Grid> </UserControl> 如果我使用用户控件而不是 DisplayMemberBinding(后者应该只是 TextBlock),则列的大小将调整为标题宽度,而不是内容的宽度。虽然内容在那里,但看起来好像是 0。 我有一种感觉,在调整列大小之前,我需要以某种方式计算用户控件的实际大小? 这是正确的吗?我该怎么做呢?我有什么遗漏的吗? 在重新调整控件大小之前似乎没有生成视觉容器。我已将代码更改为以下内容,现在它按预期工作。 foreach (var item in LvArticles.Items) { object viewItem = LvArticles.ItemContainerGenerator.ContainerFromItem(item); if (viewItem == null) { LvArticles.UpdateLayout(); LvArticles.ItemContainerGenerator.ContainerFromItem(item); } } foreach (GridViewColumn c in ((GridView)LvArticles.View).Columns) { c.Width = 0; //set it to no width c.Width = double.NaN; //resize it automatically } 如果我理解正确的话,这会强制 UI 生成实际的表示。一旦表示存在,我们就可以成功计算列的大小。

回答 1 投票 0

数据绑定 TextBlock 在 Avalonia 中运行

我想做这个 从这个视图模型 公共类 MainWindowViewModel :ViewModelBase { 公共 ObservableCollection RunList { 获取;放; } 公共 MainWindowViewModel() ...

回答 1 投票 0

鼠标悬停问题导致选项卡标题背景颜色发生变化

我是XAML新手,我正在设计一个包含嵌套选项卡控件的应用程序。最近我搜索了通过鼠标悬停和选定触发器来更改选项卡标题(选定=绿色,鼠标悬停=蓝色),...

回答 1 投票 0

ChromeDriver 在 WPF 应用程序中启动方式不同

如果我运行控制台项目,它会在当前版本上运行 启动 ChromeDriver 120.0.6099.109 但如果我的项目类型是 WPF,则: 启动 ChromeDriver 85.0.4183.87 我收到了e的消息...

回答 1 投票 0

使用 Icomparer 将小写字母排序在大写之前

我有一个ListCollectionView,其中包含场景对象的集合,我需要按场景编号(Scene.SceneNumber)对其进行排序,场景编号是一个包含数字和字母的字符串,我需要排序...

回答 1 投票 0

在 c# 中,画布的子元素分层在另一个画布下

我正在为一个学校项目做一个十字路口。 我有 4 条车道,其中有一个矩形作为在其上行驶的汽车。 问题是 1 号车和 2 号车在十字路口下行驶,而 Panel.ZIndex 似乎没有...

回答 1 投票 0

ListView 网格中的网格

我有一个包含 id、名称和价格的列表视图。每个这样的项目都有一个带有类别的子列表。 所以“对于每个”项目我想显示所有子项目。 它应该是这样的: 但我不知道...

回答 3 投票 0

C# wpf Datagrid 内容对齐中心通过代码

我生成一个数据网格并希望将内容居中。 这是我的代码: DataGrid 表 = new DataGrid(); tabelle.ItemsSource = dt.DefaultView; 表格.RowHeight = 50; tabelle.VerticalContentAlig...

回答 3 投票 0

在代码隐藏中绑定到 DataTable 时,DataGrid 会部分更新

我有一个 WPF 窗口,其中有一个 DataGrid 作为其子窗口之一。 DataGrid 中的列数仅在运行时确定。以下是我的 window.xaml 文件中 DataGrid 的代码: <

回答 1 投票 0

使用 mage.exe 自动进行扩展验证 (EV) 代码签名

我尝试使用金雅拓存储在 HSM 上的 EV 证书来签署 WPF ClickOnce 应用程序。我配置了持续部署 (CD),并且希望无需用户交互即可自动签名,...

回答 1 投票 0

WPF:为什么绑定模式OneWay没有调用回调函数?

我创建了一个带有一些属性的自定义控件,所有这些似乎都正常工作。 但经过一些测试,我发现了一种我不明白的奇怪行为。当我在 OneWay mod 中绑定属性时...

回答 1 投票 0

是否可以在 WPF / Touch 应用程序中弹出一个忽略 MenuDropAlignment 的窗口?

作为一点背景知识 - Windows 有一个针对触摸/平板电脑的功能,它可以根据您的“惯用手”移动弹出窗口/菜单的位置(以防止菜单出现在您的手下)。

回答 6 投票 0

WPF - 部署问题 - 错误模块名称:KERNELBASE.dll

我正在尝试安装并运行我的第一个 WPF 应用程序,但遇到了一些问题。我已经构建了一个安装项目,一切似乎都安装正确,我所有的第三方 dll 都已复制

wpf
回答 3 投票 0

EF Core 脚手架数据和属性已更改

我有一个 WPF 应用程序(MVVM Toolkit),其数据模型是使用数据库中的 EFcore 工具搭建的。一个特定类的最终模型如下所示: 公共部分B类...

回答 1 投票 0

如果文本框发生更改,如何获取事件?

我通过外部 yaml 文件进行了复杂的模型设计,并将视图添加为后面的代码。需要这个结构,因为我正在构建一种配置管理器,用户可以在其中创建视图布局......

回答 1 投票 0

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