wpf 相关问题

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

WPF 加载旋转器

目标是显示应用程序正在运行的信息。所以我正在寻找使用 WPF / MVVM 的加载旋转器的智能实现示例。

回答 15 投票 0

如何使 WPF TextBlock 在多行上显示我的文本?

我有一个wpf窗口,其中有一个堆栈面板,其中有两个视口 - 每个视口中都有一个文本块。 我有一个 wpf 窗口,其中有一个堆栈面板,其中有两个视口 - 每个视口中都有一个文本块。 <Grid> <StackPanel VerticalAlignment="Center" Orientation="Vertical" > <Viewbox Margin="100,0,100,0"> <TextBlock x:Name="headerText" Text="Lorem ipsum dolor" Foreground="Black"/> </Viewbox> <Viewbox Margin="150,0,150,0"> <TextBlock x:Name="subHeaderText" Text="Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, " TextWrapping="Wrap" Foreground="Gray" /> </Viewbox> </StackPanel> </Grid> 我想要实现的是顶部文本块是带有更大文本的标题。第二个文本块是具有较小文本的子标题。无论标题或副标题有多少文本,字体都应该动态变小/变大。我的问题是我希望副标题的宽度固定。这意味着,字体应该是标题的百分比 (70%),并换行为多行,具体取决于我有多少文本。我附上了迄今为止的代码...我缺少该副标题的一些内容,无法弄清楚是什么。干杯 编辑 基本上我想要实现的是子标题包裹文本,这样它就可以向下扩展它,字体占标题的 70% - 无论字体有多大。 嵌套堆栈面板将导致文本框正确换行: <Viewbox Margin="120,0,120,0"> <StackPanel Orientation="Vertical" Width="400"> <TextBlock x:Name="subHeaderText" FontSize="20" TextWrapping="Wrap" Foreground="Black" Text="Lorem ipsum dolor, lorem isum dolor,Lorem ipsum dolor sit amet, lorem ipsum dolor sit amet " /> </StackPanel> </Viewbox> 使用 TextWrapping 元素的属性 TextBlock: <TextBlock Text="StackOverflow Forum" Width="100" TextWrapping="WrapWithOverflow"/> 使用换行符: <TextBlock> <Run Text="Line1"/> <LineBreak/> <Run Text="Line2" FontStyle="Italic" FontSize="9"/> <LineBreak/> <Run Text="Line3"/> </TextBlock> 请参阅:https://social.msdn.microsoft.com/Forums/vstudio/en-US/51a3ffe4-ec82-404a-9a99-6672f2a6842b/how-to-give-multiline-in-textblock?forum=wpf 谢谢, RDV 事情就到此为止了。没有 ActualFontSize 属性,但有 ActualHeight 并且与 FontSize 相关。目前这仅适用于原始渲染的尺寸。我不知道如何将转换器注册为调整大小事件。实际上可能需要将 FontSize 注册为调整大小事件。请不要因为我的答案不完整而对我进行标记。我无法将代码示例放在评论中。 <Window.Resources> <local:WidthConverter x:Key="widthConverter"/> </Window.Resources> <Grid> <Grid> <StackPanel VerticalAlignment="Center" Orientation="Vertical" > <Viewbox Margin="100,0,100,0"> <TextBlock x:Name="headerText" Text="Lorem ipsum dolor" Foreground="Black"/> </Viewbox> <TextBlock Margin="150,0,150,0" FontSize="{Binding ElementName=headerText, Path=ActualHeight, Converter={StaticResource widthConverter}}" x:Name="subHeaderText" Text="Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, " TextWrapping="Wrap" Foreground="Gray" /> </StackPanel> </Grid> </Grid> 转换器 [ValueConversion(typeof(double), typeof(double))] public class WidthConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { double width = (double)value*.7; return width; // columnsCount; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 如果您只是想让标题字体比其他字体大一点,您可以使用 ScaleTransform。所以你不依赖于真实的字体大小。 <TextBlock x:Name="headerText" Text="Lorem ipsum dolor"> <TextBlock.LayoutTransform> <ScaleTransform ScaleX="1.1" ScaleY="1.1" /> </TextBlock.LayoutTransform> </TextBlock> 以上所有答案都不能满足我的需求,我很确定这里的大多数人都会遇到类似的问题。 我想要的是将包含换行符的字符串属性绑定到文本块,并使其显示在多行而不是单行中。 WPF 似乎没有一个简单的解决方案,所以我找到了自己的小解决方法。我使用具有自定义样式的文本框,该样式将禁用其可编辑性并使其看起来像文本块。就像一个魅力,还有一个额外的好处,人们现在可以从您的文本块复制文本,这至少在我的所有应用程序中是一个胜利! <Style TargetType="{x:Type TextBox}" x:Key="TextBlock"> <Setter Property="Background" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="Foreground" Value="Black"/> <Setter Property="IsReadOnly" Value="True"/> <Setter Property="FontSize" Value="12"/> <Setter Property="VerticalContentAlignment" Value="Left"/> </Style> 可以这样使用: <TextBox Style="{StaticResource TextBlock}" Text="{Binding UpdateChanglog}"/> 看起来像这样: 文本绑定为: •Update is from server! •The camera now actually works •Images are sharp •Network is great •Everybody happy

回答 6 投票 0

WPF 文本块从 ViewModel 中的绑定属性部分更新

我的代码有一个相当奇怪的行为。我设计了一个 Textblock 来更新一个数字,该数字表示两个 for 循环的百分比进度。 50% 的进度由

回答 1 投票 0

WPF 扩展文本框覆盖无法正常工作

我创建了一个扩展 TextBox 的 CustomTextBox。 我已经覆盖了 TextProperty 的元数据,因为我想在文本更改时触发一个方法,但是当我运行代码并编辑文本时...

回答 1 投票 0

选择datagrid标题中的所有复选框及其在wpf mvvm中的绑定

我正在研究wpf(mvvm架构)。我正在使用数据网格列出复选框,并在标题中单击“全选”复选框,我希望选中所有复选框,反之亦然......

回答 4 投票 0

WPF 选择 DataGrid 中的所有复选框

我试图选择 DataGrid 中的所有复选框,但使用下面的代码没有得到任何结果 这是我在单击主复选框时调用的函数 private void CheckUnCheck...

回答 4 投票 0

如何使覆盖控件位于所有其他控件之上?

我需要让一个控件出现在所有其他控件之上,这样它就会部分覆盖它们。

回答 6 投票 0

VS WPF Bug:.xaml 文件中定义的所有内容在 .xaml.cs 文件中都被标记为缺失。如何消除不正确的错误消息?

我从事 WPF 项目多年。通常一切都很好,但有时 VS 会错误地将 .xaml 文件中创建的每个控件标记为 .xaml.cs 源文件编辑器中不存在

回答 1 投票 0

C# WPF Visualiser:从串行端口读取数据

我正在尝试构建一个 WPF 应用程序,该应用程序可以从串行端口读取数据,该串行端口正在从连接到 ARM NUCLEO-F303K8 的 MPU6050 读取数据。我已经设法让代码达到这样的程度......

回答 1 投票 0

在 mvvm wpf c# 中将属性从一个视图模型传递到另一个视图模型

尝试将一个视图模型中的wpf数据网格中的选定行传递到另一个视图模型进行编辑。我可以选择该行并将其放入属性中。但无法将其传递给不同的另一个属性

回答 1 投票 0

如何更新流畅的 WPF 进度条?在循环中检查文件的大小不会以流畅的方式更新

我有一个进度条,其值数据绑定到名为 CurrentTotalVideoSize 的属性。我正在循环中更新 CurrentTotalVideoSize,该循环直接迭代并组合...

回答 1 投票 0

在 wpf 中的 itemscontrol 上禁用鼠标滚轮

我有一个带有滚动查看器的用户控件,然后是一堆子控件,如文本框、单选按钮和列表框等。我可以使用鼠标滚轮滚动父滚动...

回答 8 投票 0

WPF DataGrid 不使用 DataTemplate 和 DataTriggers 显示数据

我有ViewModel 公共类视图模型 { 公共字符串测试字段{获取;放; } 公共 ObservableCollection TestCollection { 获取;放; } 公共视图模型() { ... 我有视图模型 public class ViewModel { public string TestField { get; set; } public ObservableCollection<object> TestCollection { get; set; } public ViewModel() { TestField = "ABCD"; } } 我想根据 TestField 的值使用不同的 DataGridTemplateColumns。 DataGrid 将 TestCollection 作为其 ItemSource,并且在 DataTemplate 中,我想使用 ItemSource 中的项目。不过DataTemplate的选择需要依赖于TestField。 问题在于 TestField 位于 TestCollection 的上下文之外。 一种解决方案是使用转换器将 TestField 属性绑定到 CellTemplate 属性。 如果 TestField 属性在创建 ViewModel 实例后可以更改,则需要通过 INotifyPropertyChanged.PropertyChanged 事件提供其更改的通知。在我的示例中,这是通过 ViewModelBase 基类的方法完成的: public class TestFieldViewModel : ViewModelBase { public string TestField { get => Get<string>(); set => Set(value); } public ObservableCollection<object> TestCollection { get; /*set;*/ } = new(); public TestFieldViewModel() { foreach (var item in "Example") { TestCollection.Add(item); } // асинхронная смена значения с целью тестирования Task.Run(async () => { while (true) { await Task.Delay(2000); TestField = TestField == "ABCD" ? string.Empty : "ABCD"; } }); } } public class TestFieldTemplateConverter : IValueConverter { public DataTemplate Default { get; set; } public DataTemplate ABCD { get; set; } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return value switch { "ABCD" => ABCD, _ => Default }; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } <Window ---------------------------- ---------------------------- DataContext="{DynamicResource vm}"> <Window.Resources> <local:TestFieldViewModel x:Key="vm"/> </Window.Resources> <Grid> <DataGrid ItemsSource="{Binding TestCollection}"> <DataGrid.Resources> <DataTemplate x:Key="default"> <TextBlock Text="Default"/> </DataTemplate> <DataTemplate x:Key="ABCD"> <TextBlock Text="ABCD"/> </DataTemplate> <local:TestFieldTemplateConverter x:Key="templateConverter" Default="{StaticResource default}" ABCD="{StaticResource ABCD}"/> </DataGrid.Resources> <DataGrid.Columns> <DataGridTemplateColumn CellTemplate="{Binding TestField, Source={StaticResource vm}, Converter={StaticResource templateConverter}}"> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid> </Window>

回答 1 投票 0

在单独的线程中运行 WPF 窗口并等待其关闭

我需要在单击按钮时与主窗口并行运行一个新的 WPF 窗口。在前一个窗口关闭之前,不应打开另一个窗口。我找到了这个答案,可以在单独的线程中运行一个新窗口...

回答 1 投票 0

C# Selenium Chrome 从 WPF 运行异步而不阻塞主窗口

我正在尝试从 WPF 异步运行 Selenium 以检索一些信息,稍后我将在 WPF 中使用这些信息。 Selenium 正在无头运行。 我正在尝试在 Window_Loaded 事件上运行它。 这是...

回答 1 投票 0

WPF 将类实例的字段绑定到数据触发器

我有带有下一个字段的 PivotGridControl 我有带有下一个字段的 PivotGridControl <dxpg:PivotGridControl.Fields> <dxpg:PivotGridField FieldName="CourierFullName" Area="RowArea" Caption="Courier"/> <dxpg:PivotGridField FieldName="Header" Area="ColumnArea" Caption="Data" ValueFormat="yyyy-MM-dd" SortOrder= "Descending"/> <dxpg:PivotGridField Area="DataArea" SummaryType="Min" CellTemplate="{StaticResource CellTemplate}"/> </dxpg:PivotGridControl.Fields> 班级提供的填写信息 public class CourierFlattenRow { public DateTime Header { get; set; } public string CourierFullName { get; set; } public TariffZone TariffZone { get; set; } public DeliveryTerm DeliveryTerm { get; set; } public CourierExtraEvent ExtraEvent { get; set; } } 如果字段 ExtraEvent.IsWorkingDay == true,如何设置绘制单元格的数据触发器? <DataTrigger Binding="{Binding ExtraEvent.IsWorkingDay}" Value="True"> <!-- Define global resources and styles here, that apply to all pages in your app. --> <Setter Property="Visibility" Value="Hidden"/> </DataTrigger> 如果我理解正确的话,您希望在 ExtraEvent.IsWorkingDay 为 True 时显示一个项目,否则不显示。

回答 1 投票 0

如何在实时 WPF C# 中播放不断扩展的碎片 mp4 内存流

问题是我不知道如何制作通过 wpf 控件进行直播的缓冲区。缓冲区正在从分段的 mp 4 流中以字节为单位扩展。 我尝试过 libvlc、vlc ...

回答 1 投票 0

回答 1 投票 0

如何通过 UserControl 的反序列化来获得视图模型的设计实例?

我有一个带有视图模型的用户控件: 公共部分类 FarmLogPageView : UserControl { 公共农场日志页面?视图模型 { 获取 => (FarmLogPage)DataContext; 设置 =>

回答 1 投票 0

如何在另一个元素发生变化时触发 Setter

我有两个组合框,如下所示: 当第一个框选择为“全部”时,应使用 XAML 和触发器隐藏第二个框。 我有两个ComboBoxes,如下: 当第一个框选择为“All”时,应使用 XAML 和触发器隐藏第二个框。 <StackPanel Orientation="Horizontal"> <ComboBox x:Name="cbxOne" Style="{StaticResource demoStyle}"> <ComboBoxItem >One</ComboBoxItem> <ComboBoxItem >Two</ComboBoxItem> <ComboBoxItem >All</ComboBoxItem> </ComboBox> <ComboBox x:Name="cbxTwo"> <ComboBoxItem >1</ComboBoxItem> <ComboBoxItem >2</ComboBoxItem> </ComboBox> </StackPanel> 我尝试了这种风格: <Style x:Key="demoStyle" TargetType="{x:Type ComboBox}"> <Style.Triggers> <Trigger Property="SelectedValue" Value="All"> <Setter Property="cbxTwo.Visibility" Value="Collapsed"></Setter> </Trigger> </Style.Triggers> </Style> <StackPanel> <ComboBox Name="cbxOne"> <ComboBoxItem>One</ComboBoxItem> <ComboBoxItem>Two</ComboBoxItem> <ComboBoxItem>All</ComboBoxItem> </ComboBox> <ComboBox> <ComboBoxItem>1</ComboBoxItem> <ComboBoxItem>2</ComboBoxItem> <ComboBox.Style> <Style TargetType="{x:Type ComboBox}"> <Style.Triggers> <DataTrigger Binding="{Binding Path=SelectedItem.Content, ElementName=cbxOne}" Value="All"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers> </Style> </ComboBox.Style> </ComboBox> </StackPanel>

回答 1 投票 0

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