我使用下面的技术来实现水印(我是从代码的附加属性这样做,但下面的XAML演示了问题):防止裁剪
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DockPanel>
<TextBox DockPanel.Dock="Left" Name="txb">
<TextBox.Background>
<VisualBrush Stretch="None">
<VisualBrush.Visual>
<Border Background="White">
<TextBlock Text="Hint text" Foreground="DarkGray" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsKeyboardFocusWithin, ElementName=txb}" Value="True">
<Setter Property="Visibility" Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Border>
</VisualBrush.Visual>
</VisualBrush>
</TextBox.Background>
</TextBox>
<Label Content="Label text here" />
</DockPanel>
</Window>
然而,内一个DockPanel
,第一个TextBox
的宽度缩小到最小值,隐藏水印。
如何在计算TextBox
的尺寸时强制WPF考虑背景的宽度?
我想我可以计算水印文本的预期宽度并适当地设置控件的MinWidth
。但是,我宁愿更简单 - 一些属性设置或数据绑定。
这是为什么脆弱?因为控件可能没有'VisualBrush'作为背景?但是在我写的附属属性中,我已将背景设置为“VisualBrush”,所以这不是问题。 – 2014-11-25 06:33:02