Wpf 我们可以使用哪种控件组合来指示必填字段?

Wpf 我们可以使用哪种控件组合来指示必填字段?,wpf,Wpf,我想出了三种不同的方法来表示必填字段标签。然而,我不确定谁的用途是理想的。一个要求是标签应支持访问密钥。请帮助我了解应该使用哪一种。我们也欢迎其他建议 <Label Width="200" HorizontalAlignment="Left" Target="{Binding ElementName=mytb}"> <TextBlock> <Run Text="*" Foreground="Red" FontWeight="Heavy" /&

我想出了三种不同的方法来表示必填字段标签。然而,我不确定谁的用途是理想的。一个要求是标签应支持访问密钥。请帮助我了解应该使用哪一种。我们也欢迎其他建议

<Label Width="200" HorizontalAlignment="Left" Target="{Binding ElementName=mytb}">
    <TextBlock>
        <Run Text="*" Foreground="Red" FontWeight="Heavy" />
        <AccessText Text="_Name"/>
    </TextBlock>
</Label>

<Label VerticalAlignment="Center" HorizontalAlignment="Center" Target="{Binding ElementName=mytb}">
    <StackPanel Orientation="Horizontal" Grid.Row="17" Grid.Column="0" HorizontalAlignment="Right">
        <TextBlock Text="*" Foreground="Red" VerticalAlignment="Center" FontWeight="Heavy"></TextBlock>
        <AccessText Text="_Name:" />
    </StackPanel>
</Label>

<StackPanel Orientation="Horizontal">
    <TextBlock Text="*" Foreground="Red" VerticalAlignment="Center" FontWeight="Heavy"/>
    <Label Content="_Name" VerticalAlignment="Center" Target="{Binding ElementName=mytb}"/>
</StackPanel>

如果我必须选择您的一个示例,我会选择第一个,但如果不是,那么我会使用
附加属性来代替:

<TextBox Text="{Binding SomeProperty}" Attached:TextBoxProperties.IsMandatory="True" />

当然,创建
附加属性
会有一个小问题,但红色星号(*)是最后一个问题。My
IsMandatory
属性为空时,基本上会在
文本框中显示一条消息,但这是WPF。。。您可以添加一个红色星号或任何其他您可以想象的。您甚至可以使用此
附加属性
标签
上添加星号,而不是像我的示例中那样在
文本框
上添加星号

My
附加属性
与My
标签
标签颜色
附加属性
配合使用,每个属性都添加了额外的功能。。。
标签
属性提供了一个简单的
控制模板
(这是默认的
文本框
模板,带有一个额外的
文本块
),它从
App.xaml
页面读取该模板。
labelcolor
属性只允许我为额外的
TextBlock
选择不同的
前景
颜色,但在使用
属性时,它在内部设置为
红色

我的观点是:你可以像以前的许多人一样使用一个旧的红色星号,或者你可以扩展并利用WPF提供的功能来提出一个更好的解决方案。

应该使用“是相对的。例如,我们可以从性能的角度来思考。这可能意味着使用一个版本,将给出较小的视觉树。通常情况下,Textblock在这方面非常简单,但缺少Target属性,因此访问键不起作用。 从您的解决方案来看,第三个比第二个更好,因为它直接包含StackPanel,而不需要在其周围缠绕标签。第一个使用runtext元素的解决方案看起来很优雅,我更喜欢这样。 关于您想要实现的功能,我会将文本框本身标记为必填项,例如在绑定上使用验证规则。这样,标记可以在用户键入时出现和消失。请参见示例:。 另外,关于视觉树和决定使用哪些控件,我建议使用Snoop工具: