gpt4 book ai didi

WPF - 普通的最佳实践 [标签 :Input] Control

转载 作者:行者123 更新时间:2023-12-04 15:38:05 25 4
gpt4 key购买 nike

我想知道,这是在 WPF 中获得众所周知的标签输入 [或输出,无关紧要] 组合的最佳和最快方法。它是一个简单的任务,想想“对象”ME的快速输出:

姓名 - 基督徒

年龄 - 28

心情 - 好

我知道,我可以使用带有 TextBlocks 的网格。但老实说,这个“短”XAML 几乎有半页长(每个标签上的 RowDefinitions、ColDefs、Grid.Col)

另一种方式,使用三个 StackPanel(水平)和一个垂直似乎也有点愚蠢。在这种情况下,我必须给每个标签一个固定的宽度,以获得正确的缩进。它只是“感觉”不对。

因此,鉴于上面的情况,您得到了一个包含 3-6 个属性的自定义对象,您只想将其作为只读转储到您的 GUI,您会怎么做(在 WPF、Silverlight 中也是如此,如果您真的有心情:)。

当然,我可以为此编写一个用户控件。但是为什么要重新发明轮子,如果它可能已经存在了......

最后,为了进一步说明,我刚刚在现实生活中创建的示例是这篇文章的原因:

      <StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Log Count" Width="100"/>
<TextBlock Text="{Binding LastLogRun.LogMessageCount}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Start Time" Width="100"/>
<TextBlock Text="{Binding LastLogRun.StartTime}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="End Time" Width="100"/>
<TextBlock Text="{Binding LastLogRun.EndTime}"/>
</StackPanel>
</StackPanel>

最佳答案

您可以使用共享大小组来获得两个排列整齐的列的自动调整大小的网格行为,同时仍然能够将复杂性提取到 UserControl 中。

下面是一个使用 LabeledEdit 控件的示例,该控件可以执行您正在寻找的操作。复杂性已全部考虑到 UserControl 中,您需要做的就是记住在 StackPanel 上设置 Grid.IsSharedSizeScope:

<Window x:Class="WpfApplication5.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication5"
Name="Self" Title="Window1" Height="300" Width="300">
<StackPanel Grid.IsSharedSizeScope="True">
<local:LabeledEdit Label="Name"/>
<local:LabeledEdit Label="Age" Text="28"/>
<!-- and with databinding... -->
<local:LabeledEdit Label="Width"
Text="{Binding Width, ElementName=Self}"/>
<local:LabeledEdit Label="Height"
Text="{Binding Height, ElementName=Self}"/>
</StackPanel>
</Window>

这是 UserControl 的源代码。 LabeledEdit.xaml:
<UserControl x:Class="WpfApplication5.LabeledEdit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="Self">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="LabeledEdit_Labels"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="{Binding Label, ElementName=Self}"/>
<TextBox Grid.Column="1" Text="{Binding Text, ElementName=Self}"/>
</Grid>
</UserControl>

LabeledEdit.xaml.cs:
using System.Windows;

namespace WpfApplication5
{
public partial class LabeledEdit
{
public static readonly DependencyProperty LabelProperty =
DependencyProperty.Register("Label", typeof(object), typeof(LabeledEdit));
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(LabeledEdit),
new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public LabeledEdit()
{
InitializeComponent();
}

public object Label
{
get { return GetValue(LabelProperty); }
set { SetValue(LabelProperty, value); }
}
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
}
}

关于WPF - 普通的最佳实践 [标签 :Input] Control,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1015226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com