可扩展应用程序标记语言(XAML)是一种基于XML的声明式语言,用于在各种框架中初始化结构化值和对象。当问题是关于具有特定框架的XAML的使用时,还应该提供框架的标签,例如, [wpf](Windows Presentation Foundation),[silverlight],[windows-phone],[windows-store-apps](Windows 8商店应用),[win-universal-app],[xamarin.forms]或[工作流程 - 基础]
示例我得到了这一行: 注意参数如何无序 示例我得到了这一行: 注意参数如何无序 <Button HorizontalAlignment="Center" Margin="200,150,0,0" Width="189" Content="Boo" Style="{DynamicResource btnGrayDownWIthcon}" IsDefault="True" IsCancel="False" Background="{DynamicResource ContractApprovedGreen}" Height="53" VerticalAlignment="Center" Name ="btnPoo" /> 一片混乱 我希望是这样: <Button Name ="btnPoo" Content="Boo" Background="{DynamicResource ContractApprovedGreen}" Style="{DynamicResource btnGrayDownWIthcon}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="200,150,0,0" Width="189" Height="53" IsDefault="True" IsCancel="False" /> 是否有任何自动工具可以按优先级和组对xaml参数重新排序? 是的,有一个名为 XAML Markup Styler 的 Visual Studio 扩展,您可以从 https://github.com/Xavalon/XamlStyler 免费下载和使用它。我和我的团队已经使用它几个月了,效果很好。它也可以对组/优先级进行重新排序。 :)
我尝试使用 .NET MAUI 在 Visual Studio 中制作一个简单的应用程序。我搜索了添加文本并更改其属性的最简单方法,并且发现了文本框和文本块,但是当我想要...
如何使用EntityFrameworkCore的实体配置属性绑定?
当我绑定 AnotherEntity 的名称时,我的 WPF (netcore3.1-windows) EFCore 5 应用程序中没有初始数据。 数据最初加载在同一个应用程序中,但使用 WPF (net40) EFCore 6 应用程序...
如何配置GridViewColumn到List的属性绑定<EntityFrameworkCore's Entity>?
当我绑定 AnotherEntity 的名称时,我的 WPF (netcore3.1-windows) EFCore 5 应用程序中没有初始数据。 数据最初加载在同一个应用程序中,但使用 WPF (net40) EFCore 6 应用程序...
创建一个从 C# 中的 WPF 控件派生的自定义 <Page> 类?
我之前一直在我的WPF应用程序中使用System.Windows.Controls.Page类。 现在需要创建我自己的类“CustomPage”,派生自“System.Windows.Controls.Page&...
.NET MAUI 应用程序解决方案:错误(活动)APT2000 预期引用但得到(原始字符串)#000000
我在构建 .NET MAUI 应用程序解决方案时遇到问题。 当我构建解决方案时(在 Visual Studio 中),我收到以下错误消息: res/values/values.xml(6):错误 APT2000:预期引用...
我想创建一个宽度为800的Flyout,与TextBox相同。然后将弹出控件附加到文本框。由于我无法直接设置 Flyout 的宽度(没有...
我想创建一个宽度为800的Flyout,与TextBox相同。然后将弹出控件附加到文本框。由于我无法直接设置 Flyout 的宽度(没有...
我在 App.xaml 中定义了以下样式 <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> ...</desc> <question vote="13"> <p>我在 App.xaml 中定义了以下样式</p> <pre><code><Style x:Key="textBoxMultiline" TargetType="{x:Type TextBox}" > <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="HorizontalScrollBarVisibility" Value="Hidden" /> <Setter Property="MinHeight" Value="50" /> <Setter Property="TextWrapping" Value="Wrap" /> </Style> </code></pre> <p>在整个解决方案中,我们在每个需要简短文本的文本框上使用它。</p> <pre><code><TextBox x:Name="textBoxDescription" Grid.Row="2" Grid.Column="1" Style="{DynamicResource textBoxMultiline}" /> </code></pre> <p>一切都很好,但随后客户抱怨某些字段被合并在分辨率较低的旧显示器上,因此我在较高的视觉树节点之一上放置了<pre><code>ScrollViewer</code></pre>以防止合并。</p> <pre><code><ScrollViewer Height="Auto" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> ... </ScrollViewer> </code></pre> <p>奇怪的是,具有上述样式的 <pre><code>TextBox</code></pre> 开始向右扩展,而不是环绕文本。</p> <p>有没有办法在不删除<pre><code>ScrollViewer</code></pre>的情况下防止这种情况? </p> </question> <answer tick="false" vote="11"> <p>如果您不想对宽度进行硬编码,那么您可以使用元素绑定父项的宽度。</p> <p>这里我将 TextBox MaxWidth 与 ScrollViewer 实际宽度绑定。您还必须确保 ColumnDefinition 宽度应设置为“*”而不是“Auto”。如果将其设置为“自动”,它将忽略 ScrollViewer 宽度并继续扩展 ScrollViewer 和 TextBox 的宽度。 <em><strong>我认为你属于这种情况</strong></em>...</p> <pre><code><Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <ScrollViewer HorizontalScrollBarVisibility="Auto" Name="scv"> <TextBox Height="30" TextWrapping="Wrap" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}"></TextBox> </ScrollViewer> </Grid> </code></pre> </answer> <answer tick="true" vote="9"> <p>您必须为<pre><code>MaxWidth</code></pre>定义一个<pre><code>TextBox</code></pre>,否则没有限制,因为<pre><code>ScrollViewer</code></pre>。</p> </answer> <answer tick="false" vote="6"> <p>@bathineni 提供的解决方案帮助我解决了我的问题。这对我有用:</p> <pre><code><Grid > <Grid.ColumnDefinitions> <ColumnDefinition Width="50"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button Grid.Column="0" Width="30" Height="23" Margin="10,5" Content="..."/> <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Disabled" verticalScrollBarVisibility="Disabled" Name="scv"> <TextBox Height="25" Text="Insert here long text" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}" HorizontalAlignment="Stretch" /> </ScrollViewer> </Grid> </code></pre> </answer> <answer tick="false" vote="1"> <p>第一个解决方案是使用数据绑定在 XAML 中实现的。我建议你不要单独绑定控件。 XAML 解决方案是通过将具有所需 ActualWidth 和 ActualHeight 属性的控件绑定到文本框 MaxHeight 和 MaxWidth 属性来实现的。</p> <pre><code><TextBlock x:Name="PasswordText" Margin="0,0,0,20" FontFamily="Bahnschrift SemiBold Condensed" Text="PASSWORD" FontSize="20"> <TextBox x:Name="PasswordTextBox" MaxWidth="{Binding ElementName=PasswordText, Path=ActualWidth}" MaxHeight="{Binding ElementName=PasswordText, Path=ActualHeight}"> </code></pre> <p>下一个解决方案是通过在 XAML 中生成 Loaded 事件,在 C# 代码中创建它,然后在 Loaded 事件中将文本框的 MaxWidth 和 MaxHeight 属性设置为文本框 ActualWidth 和 ActualHeight 属性来实现。</p> <pre><code>// It doesn't have a problem like in XAML if you pass the textbox its own // ActualWidth and ActualHeight to the MaxWidth and MaxHeight proprieties. private void Log_In_Page_Loaded(object sender, RoutedEventArgs e) { UsernameTextBox.MaxHeight = UsernameTextBox.ActualHeight; UsernameTextBox.MaxWidth = UsernameTextBox.ActualWidth; } </code></pre> <p>选择更适合你设计的一个,但我认为,在我看来,这是解决这个问题最有效、最简单、最稳定、最有效的方法。</p> </answer> <answer tick="false" vote="0"> <p>对我有用。如果你想让滚动条出现在文本框中,你可以添加</p> <pre><code>HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" </code></pre> <p>到文本框 </p> </answer> <answer tick="false" vote="0"> <p>您必须设置 <pre><code>MaxWidth</code></pre><pre> 的 </pre><code>Container Control</code></p> <pre><code><Grid x:Name="RootGrid" Margin="6,6,8,8" Width="500" MaxWidth="500"> <ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <GroupBox Name="contentGroup" Header="Content" Grid.Row="0"> <TextBox Name="content"/> </GroupBox> </Grid> </ScrollViewer> </code></pre> <p></p> </answer> <answer tick="false" vote="0"> <p>当我需要我的<pre><code>TextBox</code></pre>在调整大小时与其自动调整大小的<pre><code>Grid</code></pre>列一起拉伸时,我遇到了这个问题,这意味着<pre><code>MaxWidth</code></pre>不起作用,但仍然需要防止<pre><code>TextBox</code></pre>拉伸及其内容。</p> <p>我最终所做的是将这个事件处理程序链接到<pre><code>SizeChanged</code></pre>:</p> <pre><code>private void TextBox_SizeChanged(object sender, SizeChangedEventArgs e) { TextBox textBox = (TextBox)sender; if (textBox.CanUndo && e.NewSize.Width > e.PreviousSize.Width) { textBox.Width = e.PreviousSize.Width; } } </code></pre> <p>将文本写入文本框是用户可以撤消的操作,而其他可能导致调整大小的操作(元素的初始绘制、父容器的拉伸等)则无法从文本框中撤消。因此,通过检查 <pre><code>CanUndo</code></pre>,我们可以确定 <pre><code>SizeChanged</code></pre> 是否是由写入文本或其他内容触发的。</p> <p><pre><code>e.NewSize.Width > e.PreviousSize.Width</code></pre> 检查是必要的,因为没有它,<pre><code>SizeChanged</code></pre> 事件将从自身内部无限地调用,因为要恢复拉伸,我们需要 <em>将大小</em> 更改回原始值,这本身就会触发事件。</p> <p>这有点棘手,但我还没有遇到任何问题。</p> </answer> <answer tick="false" vote="0"> <p>我不知道为什么,但我无法让 ScrollViewer 解决方案工作。我需要一个具有固定初始宽度的 TextBox 来实现数字向上/向下控件 - 在此控件中,TextBox 独立于输入而缩小和增长,如果 UI 在您键入时发生变化,这看起来非常烦人。</p> <p>所以,我发现以下使用 2 个文本框的解决方案适合我。第一个文本框是为用户键入输入而显示的文本框,第二个文本框通过依赖属性 (DisplayLength) 和下面进一步显示的转换器进行初始化。</p> <p>将第一个文本框的 MaxWidth 属性绑定到第二个文本框的 Width 属性可以固定大小,以便用户可以键入他们想要的内容,但即使有更多可用的 UI 空间,文本框的显示宽度也不会改变。</p> <pre><code><TextBox x:Name="PART_TextBox" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" Margin="0,0,1,0" TextAlignment="Right" AcceptsReturn="False" SpellCheck.IsEnabled="False" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MaxWidth="{Binding ElementName=TBMeasure, Path=ActualWidth}" /> <!-- Hidden measuring textbox ensures reservation of enough UI space according to DisplayLength dependency property --> <TextBox x:Name="TBMeasure" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayLength, Converter={StaticResource ByteToPlaceHolderStringConverter}}" Margin="0,0,1,0" TextAlignment="Right" AcceptsReturn="False" SpellCheck.IsEnabled="False" HorizontalContentAlignment="Right" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Visibility="Hidden"/> // Converter [ValueConversion(typeof(byte), typeof(string))] public sealed class ByteToPlaceHolderStringConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if ((value is byte) == false) return Binding.DoNothing; byte byteVal = (byte)value; string retString = string.Empty; for (int i = 0; i < byteVal; i++) retString = retString + "X"; return retString; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return Binding.DoNothing; } } </code></pre> </answer> </body></html>
当 Android 12 及更高版本时,启动画面在 .net maui 中不显示全屏
当 Android 12 及更高版本时,启动屏幕在 .NET Maui 中不显示全屏。启动画面像往常一样包含一个徽标和底部的几行文字。问题是图像和...
XAML 绑定到 ViewModel 上的 CollectionViewSource 属性
我有一个简单的 ViewModel,例如: 公共类MainViewModel { ObservableCollection _projects; 公共 MainViewModel() { // 在这里填写数据库中的_projects...
为什么 WPF UserControl 的宿主窗口不被视为其逻辑父窗口?
我自己遇到这个问题后,正在阅读 Rohit Vats 对这篇文章的回答,并且想知道为什么 UserControl 的“父”窗口不被视为其逻辑父窗口。他...
如何在WPF(XAML)中与数据内容和滚动条在同一行添加重复按钮
我想从我的 Web 应用程序到我的 WPF 桌面应用程序重新创建此设计。 在这个设计中,我在侧面有这些 << and >> 重复按钮。 这是我的 WPF 中的图像
XamlType.GetAliasedProperty 有什么意义
我尝试寻找有关此方法的信息,但我无法理解它的含义和实用性。 MSDN 对此是这么说的:https://msdn.microsoft.com/en-us//library/vs...
MAUI Toaster 在 Windows 应用程序中单击时会创建应用程序的新实例
我正在 Windows 基础应用程序上使用 .NET MAUI 应用程序,我在其中实现了用于通知的 Toast。但是,我遇到了单击 toast 消息(或 Sna...
我有这个简单的网格,这不是我有垂直堆栈布局然后水平堆栈布局的网格。在此,条目不占用 100% 宽度。我做错了什么。 我有这个简单的网格,这不是我有垂直堆栈布局然后水平堆栈布局的网格。在此,条目不占用 100% 宽度。我做错了什么。 <Grid RowDefinitions="Auto,20,20,Auto" Padding="10" ColumnDefinitions="*,*"> <Label Grid.Row="0" Grid.RowSpan="3" Grid.Column="0" Text="8901 PKR" BackgroundColor="Maroon" TextColor="White" VerticalTextAlignment="Center"></Label> <Label Grid.Row="0" Grid.Column="1" Text="5032 PKR" BackgroundColor="Maroon" TextColor="White" VerticalTextAlignment="Center"></Label> <Label Grid.Row="1" Grid.Column="1" Text="5032 PKR" BackgroundColor="Maroon" TextColor="White" VerticalTextAlignment="Center"></Label> <Label Grid.Row="2" Grid.Column="1" Text="5032 PKR" BackgroundColor="Maroon" TextColor="White" VerticalTextAlignment="Center"></Label> <!-- Form layout --> <VerticalStackLayout Grid.Row="3" Grid.ColumnSpan="2"> <!-- Account Type Row --> <HorizontalStackLayout Padding="0,10,0,10" HorizontalOptions="Fill"> <Label Text="Account Type" VerticalTextAlignment="Center" WidthRequest="100"></Label> <Entry Text="Account Type" HorizontalOptions="FillAndExpand"></Entry> </HorizontalStackLayout> <!-- Expense Type Row --> <HorizontalStackLayout HorizontalOptions="Fill"> <Label Text="Expense Type" VerticalTextAlignment="Center" WidthRequest="100"></Label> <Entry Text="Expense Type" HorizontalOptions="FillAndExpand"></Entry> </HorizontalStackLayout> <!-- Amount Row --> <HorizontalStackLayout HorizontalOptions="Fill"> <Label Text="Tota" VerticalTextAlignment="Center" WidthRequest="100"></Label> <Entry Text="" HorizontalOptions="FillAndExpand"></Entry> </HorizontalStackLayout> <!-- Description Row --> <HorizontalStackLayout HorizontalOptions="Fill"> <Label Text="Description" VerticalTextAlignment="Center" WidthRequest="100"></Label> <Entry Text="Descr" HorizontalOptions="FillAndExpand"></Entry> </HorizontalStackLayout> <!-- Submit Button --> <Button Text="Submit" HorizontalOptions="Fill"></Button> </VerticalStackLayout> <ListView> </ListView> </Grid> StackLayout中的组件仅占用其所需的空间。 您可以尝试使用 Grid 来代替。 <!-- Account Type Row --> <Grid Padding="0,10,0,10" ColumnDefinitions="Auto, *"> <Label Grid.Column="0" Text="Account Type" VerticalTextAlignment="Center" WidthRequest="100"></Label> <Entry Grid.Column="1" Text="Account Type"></Entry> </Grid> 附注不要再使用FillAndExpand了。它已被弃用。 Fill 是默认值,因此无需指定。
当鼠标悬停在元素上时调整 ColumnDefinition 的大小
当用户的光标位于 Border 元素上时,我试图使网格列占据大部分窗口。 鼠标位于右侧边框的示例 但是,我无法获取 ColumnDefintion.W...
我是 C# Maui 的新手,并陷入了一项简单的任务,但我找不到任何如何执行该任务的信息。 我的目标是创建一个 XAML 模板,然后我可以用其他 XAML 内容填充该模板。 我的想法是...
我正在使用 TemplateStudio 来构建我的项目 在视图 > TestPage.xaml 中 我正在使用 TemplateStudio 来构建我的项目 在 视图 > TestPage.xaml <Page x:Class="FluentQQ.Views.TestPage" ...> <Grid> <TextBox x:Name="MessageInput" /> </Grid> </Page> 并在视图> TestPage.xaml.cs using FluentQQ.ViewModels; using Microsoft.UI.Xaml.Controls; namespace FluentQQ.Views; public sealed partial class TestPage : Page { public TestViewModel ViewModel { get; } public TestPage() { ViewModel = App.GetService<TestViewModel>(); InitializeComponent(); } } 然后,我尝试获取TextBox“MessageInput”的内容 因此,在 ViewModels > TestViewModel.cs 中,我使用 MessageInput.Text 但是没用 CS0103 The name 'MessageInput' does not exist in the current context 我知道这个问题可能很简单,但请原谅我只是初学者 如错误消息所示,MessageInput控件不存在于*TestPageViewModel中。对于 MVVM,通常您应该使用绑定从视图中获取数据。 只是为了确保我们在同一页面上,在这种情况下: TestPage.xaml 是 View TestPage.xaml.cs 是 代码隐藏 TestPageViewModel.cs 是 ViewModel 安装 CommunityToolkit.Mvvm nuget 包。如果您使用 MVVM 模式,这将使您的生活更轻松。 在您的 ViewModel 中,TestPageViewModel: // This class needs to be "partial" // for the "CommunityToolkit.Mvvm" source generators. public partial class TestPageViewModel : ObservableObject { // The source generators will create // an UI interactable "SomeText" property for you. [ObservableProperty] private string someText; } 在您的代码隐藏中,TestPage.xaml.cs: public sealed partial class TestPage : Page { public TestViewModel ViewModel { get; } public TestPage() { ViewModel = App.GetService<TestViewModel>(); InitializeComponent(); } } 然后在您看来,TestPage.xaml: <TextBox x:Name="MessageInput" Text="{x:Bind ViewModel.SomeText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 仅此而已。每次您更改 TextBox 中的文本时,SomeText 都会更新。 顺便说一句,您可以直接从代码隐藏访问TextBox。只要确保使用 x:Name 来命名即可。 TestPage.xaml.cs MessageInput.Text = "some text";
我想更改该代码以与 MVVM 兼容。 下面的代码带有代码隐藏 我想更改该代码以与 MVVM 兼容。 下面的代码带有代码隐藏 <Button x:Name="sevenBtn" Grid.Row="2" Grid.Column="0" Click="NumberBtn_Click" Content="7" Style="{StaticResource numberButtonsStyle}" /> private void NumberBtn_Click(object sender, RoutedEventArgs e) { int selectedValue = int.Parse((sender as Button).Content.ToString()); } 我使用 CommunityToolkit.Mvvm、Microsoft.Xaml.Behavior.Wpf 有人可以帮助我吗? 谢谢 在 MVVM 中发送对象。 这是一个简单的示例代码: 左侧:如何实现数字按钮。 右侧:如何使用CommunityToolkit.Mvvm的另一个示例代码。 MainWindowViewModel.cs using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; namespace WpfAppTests; public partial class MainWindowViewModel : ObservableObject { [RelayCommand] private void UpdateNumber(string numberString) { if (int.TryParse(numberString, out int number) is true) { Number = number; } } [ObservableProperty] private int number; [ObservableProperty] private string someText = string.Empty; [RelayCommand] private void UpdateText(string text) { SomeText = text; } } MainWindow.xaml <Window x:Class="WpfAppTests.MainWindow" 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:WpfAppTests" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="MainWindow" Width="800" Height="450" mc:Ignorable="d"> <Window.DataContext> <local:MainWindowViewModel /> </Window.DataContext> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <!-- Your number button sample code. --> <StackPanel Grid.Column="0"> <Button Command="{Binding UpdateNumberCommand}" CommandParameter="{Binding Content, RelativeSource={RelativeSource Self}}" Content="5" /> <TextBlock Text="{Binding Number}" /> </StackPanel> <!-- Simple sample code of how to use the CommunitToolkit.Mvvm. --> <StackPanel Grid.Column="1"> <TextBox x:Name="InputTextBox" /> <Button Command="{Binding UpdateTextCommand}" CommandParameter="{Binding ElementName=InputTextBox, Path=Text}" Content="Update text" /> <TextBlock Text="{Binding SomeText}" /> </StackPanel> </Grid> </Window>