2012-05-09 41 views
5

tôi tìm kiếm trên web cho TextBox với góc tròn và tìm một mã XAML như dưới đây:Tròn góc TextBox trong 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> 

tôi muốn tìm hiểu là những gì

<ScrollViewer x:Name="PART_ContentHost" /> 

một cách chi tiết và lý do tại sao không làm việc đúng mẫu của tôi nếu xóa dòng này khỏi nó, hãy cho tôi biết chi tiết hoàn toàn.

cảm ơn rất nhiều.

Trả lời

6

Phần có tên "PART_ContentHost" chứa lõi điều khiển, đây chính là hộp văn bản, bên cạnh các trang sức. Mã của hộp văn bản phía sau sẽ tìm kiếm nó, vì vậy nếu bạn đổi tên của xóa, điều khiển sẽ không hoạt động. Trong trường hợp này, nội dung có thể cuộn được (vì hộp văn bản có thể cuộn văn bản theo chiều ngang và chiều dọc).

+0

nhờ cho câu trả lời của bạn, theo nói chuyện của bạn, trong các mẫu của bất kỳ điều khiển, nơi mà tôi viết '' mã, nơi kiểm soát thực tế có và 'x: Name = "PART_ContentHost"' có nghĩa là kiểm soát chính nó, trong suy nghĩ của bạn mà tôi tin tưởng? –

+0

vâng, về cơ bản có, nhưng không phải tất cả các điều khiển đều có cùng tên phần. Nó phụ thuộc vào những gì họ làm. Một số ví dụ tại http://xamlcoder.com/cs/blogs/joe/archive/2007/12/13/building-custom-template-able-wpf-controls.aspx và http://drwpf.com/blog/category/control-templates/ –

+0

cảm ơn rất nhiều .......... –

1

ScrollViewer chứa nội dung thực tế của điều khiển. Kiểm soát của bạn không phải là một hộp văn bản thực sự, nhưng thực sự là một biên giới (với các góc tròn) xung quanh một ScrollViewer, mà sau đó bạn sẽ cần phải đặt văn bản của bạn. Nếu bạn không cần phải di chuyển, bạn có thể thay thế các ScrollViewer với một hộp văn bản, ví dụ:

thay đổi

<ScrollViewer x:Name="PART_ContentHost" /> 

để

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

cảm ơn câu trả lời của bạn, tôi đã thay đổi mã của mình theo lời giải thích ở trên và chưa hoạt động đúng cách, –

+0

Bạn có thể đăng nội dung của lớp 'CustomTextBox' của mình không cũng thế? Cả hai sẽ được yêu cầu để hiểu đầy đủ mã của bạn. –

5

Nếu bạn cần một hộp đơn giản với các góc tròn, bạn có thể làm như vậy:

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

sử dụng phần này của xaml deign:

<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