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



我已经找到了三种不同的方法来表示必填字段标签。但是我不确定谁的用途是理想的。一个要求是标签应支持访问密钥。请帮助我了解应该使用其中的哪些。其他建议也值得赞赏。

<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>

如果我必须选择您的示例之一,我会选择第一个,但如果没有,那么我将为此使用Attached Property

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

当然,你会遇到一个小问题 创建一个Attached Property ,但红色星号 (*( 是最后一个时代。我的 IsMandatory 属性基本上在TextBox为空时显示一条消息,但这是 WPF...你可以添加一个红色星号或你能想象到的任何其他东西。您甚至可以使用此Attached PropertyLabel上添加星号,而不是像我示例中那样添加TextBox

我的Attached Property与我的LabelLabelColour Attached Properties一起工作,每个都增加了额外的功能......Label 属性提供了一个简单的ControlTemplate(这是带有额外TextBlock的默认TextBox模板(,它从App.xaml页面读取。LabelColour属性只允许我为额外的TextBlock选择不同的Foreground颜色,但在使用 IsMandatory 属性时内部设置为Red

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

">

应该使用"是相对的。例如,我们可以从性能的角度来思考。这可能意味着使用一个可以提供较小可视化树的版本。通常,文本块对此非常轻巧,但缺少目标属性,因此访问键不起作用。从您的解决方案来看,第三个比第二个更好,因为它直接包含 StackPanel,周围没有包裹标签。运行文本元素的第一个解决方案似乎很优雅,我更喜欢它。关于您想要实现的功能,我会将文本框本身标记为必需的,例如在绑定上使用验证规则。这样,标记可以随着用户键入而出现和消失。参见示例:http://www.nbdtech.com/Blog/archive/2010/07/05/wpf-adorners-part-3-ndash-adorners-and-validation.aspx。另外,关于可视化树和决定使用哪些控件,我推荐Snoop工具:http://snoopwpf.codeplex.com。

最新更新