2010-10-13 45 views
0

如何让WPF TextBox充当紧凑形式?
这意味着TextBox内的“标签文本”隐藏在点击或有“真实文本”时。
See working prototype如何使WPF TextBox充当紧凑形式?

+0

我找到[Exteded WPF工具包]一些有用的东西(http://wpftoolkit.codeplex.com/) - [WatermarkTextBox](http://wpftoolkit.codeplex.com/wikipage ?title = WatermarkTextBox) – giperon 2011-03-29 17:04:12

回答

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

刚刚意识到我没有掩盖“隐藏焦点”的行为......如果有机会,我会更新它。 – 2010-10-13 07:38:15