2009-12-10 8 views
6

Ho un bordo in XAML/WPF che sto usando per dare una sottolineatura a larghezza di paragrafo intero ai titoli di testo in una finestra di dialogo. Ho impostato la proprietà BorderThickness su "0,0,0,1". In alcuni punti, finisce con il rendering con una sottolineatura di 2 pixel, mentre in altri appare correttamente come sottolineatura a pixel singolo. Che cosa sto facendo di sbagliato?BorderThickness di 1 rendering con uno spessore di 2 pixel - cosa mi manca qui?

Ecco il modello di controllo che sto usando per sostituire albero visuale della mia etichetta (l'uso di un modello è irrilevante, avrei pensato):

<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> 

Sono abbastanza nuovo a WPF, così Sospetto che mi manchi qualcosa di fondamentale nel suo modello di rendering.

  • Il rendering del bordo oltre un limite di pixel? Non sembra così, come avrei pensato sarebbe stato parzialmente trasparente se così fosse.
  • C'è un modo per garantire che ottenga quello che chiedo in termini di spessore?
  • Ho persino fatto un errore di urlo?

E per riferimento, non sto applicando una trasformazione di ridimensionamento (o qualsiasi altro tipo di trasformazione per quella materia). Qualsiasi aiuto sarebbe apprezzato. :)

risposta

6

Il numero di pixel che un elemento occupa dipenderà da diversi fattori tra cui:

  • Il DPI dello schermo
  • Trasformazioni sull'elemento o qualsiasi suo antenato
  • Dove viene reso in relazione ai limiti dei pixel dello schermo

I numeri che stai utilizzando devono essere considerati come relativi gli uni agli altri invece che i valori assoluti in termini di come sono resi.

Detto questo, WPF 4.0 includerà Layout Rounding che è possibile utilizzare per ridurre i casi in cui le linee che si suppone abbiano lo stesso spessore vengono rese in modo diverso a seconda che si verifichi o meno che attraversino un limite di pixel.

+0

Quindi quello che stai dicendo è, per il momento essendo, devo lasciare andare il mio desiderio di controllare le cose il più rigorosamente possibile con, per esempio, HTML e CSS? :) –

+1

In breve, sì :) – GraemeF

+0

Ho lavorato a un controllo un po 'complesso per un paio di giorni e mi frustra continuamente sbavando i colori dei bordi, ecc. La prima domanda che guardo ha la risposta e, mentre il mio la natura ossessiva mi dice che DEVE essere un work-around, apprezzo l'intuizione. Grazie! – Brad

Problemi correlati