我使用下面的技術來實現水印(我是從代碼的附加屬性這樣做,但下面的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