2011-08-22 20 views
4

我想弄清楚如何使用適當的對話框單元(DLU)在WPF中佈局一個簡單的對話框。如何在WPF中的對話單元中指定單位?

我想出了一個簡單的r例如已經,,削減直接的問題:

enter image description here

您可以檢查Windows UX Guidelines上看到這些測量從何而來。
短的版本是:

  • DLU = 對話單元
  • DLU是基於字體大小(項目與用戶的字體大小改變)
  • 一個水平 DLU是從不同垂直 dlu(dlu's不是正方形

這個來自對話單元的定義:平均字符是8dlus高4dlus寬

格魯吉亞14pt:

enter image description here

如果您使用較小的字體(即8PT的Tahoma經文14pt格魯吉亞),該DLUS變得更小:

的Segoe UI宋體:

enter image description here

注意:你會注意到,分辨率(即dpi)對討論沒有影響。

+0

重複的http://stackoverflow.com/questions/395195/wpf-how-to-specify-units-in-dialog-units – Bas

+0

@Bas就好像我鏈接到它不是一個贈品。 –

+0

可能重複的[WPF:如何在對話單元中指定單位?](https://stackoverflow.com/questions/395195/wpf-how-to-specify-units-in-dialog-units) –

回答

2

你可以嘗試創建一個Converter返回乘以無論你DLU值

例如,我創建了一個MathConverter(代碼爲here),這將讓你指定一個像

<Button Height="{Binding Source={x:Static local:Settings.VerticalDLU, 
      Converter={StaticResource MathConverter}, 
      [email protected]*14}" 

     Width="{Binding Source={x:Static local:Settings.HorizontalDLU, 
      Converter={StaticResource MathConverter}, 
      [email protected]*50}" /> 

東西爲了使寫和讀更容易,您可以創建一個繼承自「綁定」並設置默認綁定屬性的類,因此您所要做的只是

<Button Height="{local:MyVDluBinding Source=14}" 
     Width="{local:MyHDluBinding Source=50}" /> 

我從來沒有嘗試覆蓋默認值爲ConverterConverterParameter的綁定,但爲了驗證目的我已經覆蓋了一個綁定,所以我相信這是可能的。

我創建的ValidationBinding可以像Text="{local:ValidationBinding MyProperty}"一樣使用,並在綁定中自動設置ValidatesOnDataError=True, ValidatesOnException=True, UpdateSourceTarget=PropertyChanged

+0

爲什麼Ian沒有接受這個答案?它看起來很合理。我打算建議子類化並添加新的DependencyProperties。你的解決方案看起來更乾淨此外,附加的屬性也可能工作。 – kevinarpe

相關問題