2011-11-29 28 views
3

我試圖定義我的XAML的本地資源這應該是我的單元格的寬度,因此而不是去:這個寬度的數據類型是什麼?

<Setter Property="ColumnStretchMinWidth" Value="75"/> 
<Textbox Width="75" /> 
<ColumnDefinition Width="*" MinWidth="75" /> 
...etc 

我可以去

<Setter Property="ColumnStretchMinWidth" Value="{StaticResource MinCellWidth}"/> 
<Textbox Width="{StaticResource MinCellWidth}" /> 
<ColumnDefinition Width="*" MinWidth="{StaticResource MinCellWidth}" /> 

但是,當我定義這個常量,我得到綁定錯誤,說它不能投射。當我去

<System:String x:Key="MinCellWidth">"75"</s:String> 

我得到一個錯誤,說它不能從字符串轉換爲雙重的一些控制。當我去

<System:Double x:Key="MinCellWidth">"75"</s:Double> 

我得到一個錯誤說,它不能從雙轉換爲字符串其他控件(如ColumnDefinition,其中「*」寬度允許的)。

什麼是硬編碼="75"的神奇類型,它可以將其轉換爲適合每個控件的類型。我如何定義可用於所有這些不同位置的資源?

+0

[在XAML使用系統類型作爲資源(http://stackoverflow.com/questions/3680146/using-system-types-in-xaml-as-resources) – Fenton

+0

@Sohnee的可能重複的 - 隱而不宣現在沒關係,因爲這個問題得到了解答,但另一個問題是尋找適用於ColumnDefinitions的類型。我正在尋找一種解決方案,可以爲所有這些類型使用常量 - 而不僅僅是ColumnDefinitions。 – Alain

回答

5

魔法類型ColumnDefinition.Width是GridLength,它需要一個該類型的資源。就像TextBox.Width需要一個double一樣。

<s:Double x:Key="minCellWidth">55</s:Double> 
<sw:GridLength x:Key="minGridWidth">55</sw:GridLength> 
+0

奇怪 - 我認爲,因爲我可以直接在xaml中輸入它(沒有任何類型定義),所以xaml有某種變體類型。好的,所以我需要兩個常量 - 但是如果文本框的寬度是「自動」,我怎樣才能使它適合雙常數?我知道當你設置Width =「Auto」時,寬度存儲爲NAN,但當「Auto」分配給「cellWidth」StaticResource時,不會以同樣的方式自動發生。 – Alain

+0

不能使用' NaN'? – erikH

0

這與"75"的類型沒有任何關係,它是一個字符串,問題是字符串文字使用type converters轉換。

這應該由工作方式爲綁定的應用型轉換器以及:

MinWidth="{Binding Source={StaticResource MinCellWidth}}" 
+0

現在,我將寬度設置爲「自動」,我收到錯誤「無法將自動轉換爲網格長度」。直接使用自動(而不是作爲StaticResource)雖然工作。 – Alain

+0

@Alain:我編輯了我的答案,因爲我對這個問題做了一個錯誤的假設。因爲你的問題是'這個寬度的數據類型是什麼?'我假設你有'ColumnDefinition.Width'這是唯一的外來類型在這裏的問題。 –

+0

MinWidth =「{Binding Source = {StaticResource MinCellWidth}}」'MinCellWidth'是如何定義的?我找不到一種方法來定義它適用於所有三種,但硬編碼的「75」適用於所有三種。 – Alain