2012-05-09 91 views
5

我在網上搜索與圓角文本框,並找到一個XAML代碼如下圖所示:圓角文本框在WPF

<Style TargetType="{x:Type my1:CustomTextBox}"> 
      <Setter Property="HorizontalContentAlignment" Value="Center"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate > 
         <Border Background="{TemplateBinding Background}" x:Name="Bd" 
BorderThickness="2" CornerRadius="5" BorderBrush="#FFF9EAB6"> 
          ***<ScrollViewer x:Name="PART_ContentHost" />*** 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter TargetName="Bd" Property="BorderBrush" Value="#FFC7B0B0"/> 
          </Trigger> 
          <Trigger Property="IsKeyboardFocused" Value="True"> 
           <Setter TargetName="Bd" Property="BorderBrush" Value="#FFC7B0B0"/> 
           <Setter Property="Foreground" Value="Black"/> 
          </Trigger> 
          <Trigger Property="IsKeyboardFocused" Value="False"> 
           <Setter Property="Foreground" Value="#FFC7B0B0"/> 
          </Trigger> 
          <Trigger Property="Width" Value="Auto"> 
           <Setter Property="MinWidth" Value="120"/> 
          </Trigger> 
          <Trigger Property="Height" Value="Auto"> 
           <Setter Property="MinHeight" Value="27"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 

       </Setter.Value> 
      </Setter> 
     </Style> 

我想了解一下什麼是

<ScrollViewer x:Name="PART_ContentHost" /> 
詳細

爲什麼如果從它刪除此行,請不要正確地使用我的模板, 請詳細告訴我。

非常感謝。

回答

6

名爲「PART_ContentHost」的部分包含控件核心,除裝飾外,這是文本框本身。該文本框的代碼將查找它,所以如果你重命名刪除,該控件將無法正常工作。 在這種情況下,內容是可滾動的(因爲文本框可以水平和垂直滾動文本)。

+0

謝謝您的回答,根據您的通話,在任何控件,在那裏我寫「」的模板代碼,實際控制的地方有,'x:Name ='PART_ContentHost''是指控制本身,你認爲我相信嗎? –

+0

是的,基本上是的,但並非所有的控件都具有相同的部件名稱。它取決於他們做什麼。 http://xamlcoder.com/cs/blogs/joe/archive/2007/12/13/building-custom-template-able-wpf-controls.aspx和http://drwpf.com/blog/category上的一些示例/ control-templates/ – 2012-05-09 04:58:50

+0

非常感謝.......... –

1

ScrollViewer包含控件的實際內容。您的控件不是真正的文本框,但實際上是一個圍繞ScrollViewer的邊框(帶有圓角),然後您需要放置文本。如果你不需要滾動,你可以用文本框取代的ScrollViewer,即:

變化

<ScrollViewer x:Name="PART_ContentHost" /> 

<TextBox x:Name="PART_ContentHost" /> 
+0

感謝您的回答,我根據上述說明更改了我的代碼,但仍無法正常工作, –

+0

您可以發佈「CustomTextBox」類的內容也?爲了充分理解你的代碼,兩者都是必需的。 –

5

如果你需要一個帶圓角的簡單文本框,你可以做這樣的:

<Border Padding="5" CornerRadius="5" BorderThickness="1" BorderBrush="LightGray" SnapsToDevicePixels="True" Background="White"> 
    <TextBox Background="Transparent" BorderThickness="0">This is beautifull ;)</TextBox> 
</Border> 
1

使用XAML的這部分不屑:

<TextBox x:Name="usernameText" Height="30" Width="300" TextWrapping="Wrap" Text="" FontSize="20" HorizontalContentAlignment="Center" LostFocus="usernameText_LostFocus"> 
         <TextBox.Resources> 
          <Style TargetType="{x:Type Border}"> 
           <Setter Property="CornerRadius" Value="10"/> 
          </Style> 
         </TextBox.Resources> 
        </TextBox> 

The shape will be like this