2009-12-10 4 views
6

Tôi đã có một Biên giới trong XAML/WPF mà tôi đang sử dụng để cung cấp cho một đoạn văn đầy đủ chiều rộng gạch dưới để tiêu đề văn bản trong một hộp thoại. Tôi đặt thuộc tính BorderThickness của nó thành "0,0,0,1". Ở một số nơi, nó kết thúc lên được kết xuất với một gạch dưới dày 2-pixel trong khi ở những người khác nó xuất hiện chính xác như là một gạch dưới một điểm ảnh. Tôi đang làm gì sai?BorderThickness of 1 ám với độ dày 2 pixel - tôi thiếu gì ở đây?

Dưới đây là các mẫu kiểm soát tôi đang sử dụng để thay thế cây thị giác nhãn của tôi (việc sử dụng một mẫu được không quan trọng, tôi sẽ đã suy nghĩ):

<ControlTemplate x:Key="HeaderTemplate" TargetType="{x:Type Label}"> 
<Border BorderThickness="0,0,0,1" Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Margin}"> 
    <Border.BorderBrush> 
    <LinearGradientBrush StartPoint="0,0" EndPoint="1,0"> 
     <GradientStop Offset="0" Color="Black"/> 
     <GradientStop Offset="0.6" Color="Black"/> 
     <GradientStop Offset="1" Color="Transparent"/> 
    </LinearGradientBrush> 
    </Border.BorderBrush> 
    <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" Style="{StaticResource HeaderStyle}" 
      Margin="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Padding}"/> 
</Border> 
</ControlTemplate> 

Tôi khá mới để WPF, vì vậy Tôi nghi ngờ tôi đang thiếu một cái gì đó cơ bản về mô hình dựng hình của nó.

  • Đường viền có được vẽ trên ranh giới pixel không? Không có vẻ như vậy, như tôi đã nghĩ nó sẽ là một phần trong suốt nếu vậy.
  • Có cách nào để đảm bảo rằng tôi nhận được những gì tôi yêu cầu về độ dày?
  • Tôi thậm chí đã tạo ra một lỗi hú?

Và để tham khảo, tôi không áp dụng phép biến đổi tỷ lệ (hoặc bất kỳ loại chuyển đổi nào khác cho vấn đề đó). Bất kỳ trợ giúp sẽ được đánh giá cao. :)

Trả lời

6

Số lượng pixel mà một yếu tố chiếm sẽ phụ thuộc vào nhiều yếu tố bao gồm:

  • Các DPI của màn hình
  • Transformations trên phần tử hoặc bất kỳ tổ tiên của nó
  • đâu nó được hiển thị liên quan đến các ranh giới pixel của màn hình

Số bạn đang sử dụng nên được coi là tương đối với nhau hơn là giá trị tuyệt đối về mặt về cách chúng được hiển thị.

Có nói rằng, WPF 4.0 sẽ bao gồm Layout Rounding mà bạn có thể sử dụng để giảm trường hợp các đường được cho là cùng độ dày được hiển thị khác nhau tùy thuộc vào việc chúng có vượt qua ranh giới pixel hay không.

+0

Vì vậy, những gì chúng ta đang nói là, trong thời gian này là, tôi phải từ bỏ mong muốn của mình để kiểm soát mọi thứ đúng như tôi có thể, HTML, CSS? :) –

+1

Tóm lại, có :) – GraemeF

+0

Tôi đã làm việc trên một điều khiển hơi phức tạp trong một vài ngày và nó liên tục làm tôi thất vọng bằng cách bôi nhọ màu sắc biên giới, vv Câu hỏi đầu tiên tôi xem có câu trả lời và, trong khi bản chất ám ảnh nói với tôi rằng PHẢI là một công việc xung quanh, tôi đánh giá cao sự thấu hiểu. Cảm ơn bạn! – Brad