如何让WPF TextBox充当紧凑形式?
这意味着TextBox中的“标签文本”隐藏在点击上或存在“真实文本”时
See working prototype
答案 0 :(得分:0)
您可以在TextBox的样式中使用数据触发器,并将背景设置为包含文本的内容。一个简单有用的样本就是:
<TextBox>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="">
<Setter Property="Background">
<Setter.Value>
<VisualBrush Stretch="None" AlignmentX="Left">
<VisualBrush.Visual>
<TextBlock Text="This is the label text" Foreground="Silver" />
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
在Kaxaml中测试; “标签文本”对齐方式并不完全正确,您可能希望将其重构为更适合生产代码的内容。
编辑以涵盖“隐藏焦点”场景,您需要更复杂的触发器。将datatrigger替换为:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Text, RelativeSource={RelativeSource Self}}" Value="" />
<Condition Binding="{Binding IsKeyboardFocused, RelativeSource={RelativeSource Self}}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Background">
<Setter.Value>
<VisualBrush Stretch="None" AlignmentX="Left">
<VisualBrush.Visual>
<TextBlock Text="This is the label text" Foreground="Silver" />
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
</MultiDataTrigger>