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" />
当然,创建附加属性
会有一个小问题,但红色星号(*)是最后一个问题。MyIsMandatory
属性为空时,基本上会在文本框中显示一条消息,但这是WPF。。。您可以添加一个红色星号或任何其他您可以想象的。您甚至可以使用此附加属性
在标签
上添加星号,而不是像我的示例中那样在文本框
上添加星号
My附加属性
与My标签
和标签颜色
附加属性
配合使用,每个属性都添加了额外的功能。。。标签
属性提供了一个简单的控制模板
(这是默认的文本框
模板,带有一个额外的文本块
),它从App.xaml
页面读取该模板。labelcolor
属性只允许我为额外的TextBlock
选择不同的前景
颜色,但在使用属性时,它在内部设置为红色
我的观点是:你可以像以前的许多人一样使用一个旧的红色星号,或者你可以扩展并利用WPF提供的功能来提出一个更好的解决方案。应该使用“是相对的。例如,我们可以从性能的角度来思考。这可能意味着使用一个版本,将给出较小的视觉树。通常情况下,Textblock在这方面非常简单,但缺少Target属性,因此访问键不起作用。
从您的解决方案来看,第三个比第二个更好,因为它直接包含StackPanel,而不需要在其周围缠绕标签。第一个使用runtext元素的解决方案看起来很优雅,我更喜欢这样。
关于您想要实现的功能,我会将文本框本身标记为必填项,例如在绑定上使用验证规则。这样,标记可以在用户键入时出现和消失。请参见示例:。
另外,关于视觉树和决定使用哪些控件,我建议使用Snoop工具: