2011-08-31 38 views
5

Tôi có một hộp văn bản được thêm bằng chương trình vào canvas vào một thời điểm nào đó và tôi muốn tất cả văn bản có hiệu ứng dropshadowe nhưng tôi không muốn hiệu ứng được áp dụng cho các đường viền của hộp văn bản. Làm thế nào để tôi làm điều này? Thêm một dropshadoweffect vào hộp văn bản áp dụng hiệu ứng cho các đường viền của hộp và "làm mờ" văn bản một chút nhưng đó không phải là những gì tôi muốn và tôi không thể tìm thấy bất kỳ thuộc tính nào trên hộp văn bản cho phép tôi thêm hiệu ứng vào văn bản. Tôi có thực sự phải thiết kế lại hộp văn bản hoặc tạo mẫu của riêng mình để đạt được điều này không ??làm thế nào để thêm dropshadoweffect vào văn bản của một hộp văn bản (theo chương trình)

Tâm trí bạn này là một hộp, không phải là một TextBlock (trong trường hợp này tôi chỉ sẽ phải sao chép/dán từ here)

Trả lời

5

Cập nhật: Tìm thấy một cách tốt hơn, bạn có thể bỏ qua phần Border nếu bạn áp dụng các Effect trực tiếp đến ScrollViewer đóng gói văn bản trong Mẫu.

<TextBox Text="Shadow Text"> 
    <TextBox.Resources> 
     <Style TargetType="ScrollViewer"> 
      <Setter Property="Effect"> 
       <Setter.Value> 
        <DropShadowEffect ShadowDepth="4" 
             Direction="330" 
             Color="Black" 
             Opacity="0.5" 
             BlurRadius="4"/> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TextBox.Resources> 
</TextBox> 

Cập nhật 2: nhỡ phần của việc tạo ra các TextBox trong mã. Đây là C# tương đương với XAML trên

Setter effectSetter = new Setter(); 
effectSetter.Property = ScrollViewer.EffectProperty; 
effectSetter.Value = new DropShadowEffect 
{ 
    ShadowDepth = 4, 
    Direction = 330, 
    Color = Colors.Black, 
    Opacity = 0.5, 
    BlurRadius = 4 
}; 
Style dropShadowScrollViewerStyle = new Style(typeof(ScrollViewer)); 
dropShadowScrollViewerStyle.Setters.Add(effectSetter); 

TextBox dropShadowTextBox = new TextBox(); 
dropShadowTextBox.Text = "Shadow Text"; 
dropShadowTextBox.Foreground = Brushes.Teal; 
dropShadowTextBox.FontSize = 40; 
dropShadowTextBox.Margin = new Thickness(10); 
dropShadowTextBox.Resources.Add(typeof(ScrollViewer), dropShadowScrollViewerStyle); 

Tốt câu hỏi, một ý tưởng là làm cho Bối cảnh và BorderBrush Transparent cho TextBox và đặt nó trong một Border

<Border BorderThickness="1" 
     BorderBrush="#FF7F9DB9" 
     SnapsToDevicePixels="True" 
     UseLayoutRounding="True" 
     Margin="10"> 
    <TextBox Text="Shadow Text" 
      Foreground="Teal" 
      FontSize="40" 
      Background="Transparent" 
      BorderBrush="Transparent"> 
     <TextBox.Effect> 
      <DropShadowEffect ShadowDepth="4" 
         Direction="330" 
         Color="Black" 
         Opacity="0.5" 
         BlurRadius="4"/> 
     </TextBox.Effect> 
    </TextBox> 
</Border> 

Đây là so sánh với "bình thường" TextBox

enter image description here

+0

đó là xaml chứ không phải là mã nhưng tôi sẽ quản lý, cảm ơn câu trả lời xuất sắc và cũng cho ảnh chụp màn hình được thêm – mtijn

+1

Thêm phương pháp tốt hơn, loại bỏ việc sử dụng 'Biên giới'. Đặt hiệu ứng trên 'ScrollViewer' trong mẫu –

+0

+1 để tìm giải pháp giới hạn trong phạm vi của hộp văn bản, tuyệt vời! – mtijn

Các vấn đề liên quan