2010-10-13 50 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