2013-01-02 89 views
0

我有一個ScreenHeightConverter,並且想要在GridViewItemHeight上使用它。XAML轉換器不起作用

但我不知道我是否正確使用它,因爲如果我調試它,它甚至不會跳轉到轉換器。

我的代碼:

public class ScreenHeightConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     double ScreenHeight = (int)Window.Current.Bounds.Height; 
     double factor = 1050/(double)value; 
     return (int)(ScreenHeight/factor); 
    } 
} 

<VariableSizedWrapGrid Margin="3" ItemHeight="{Binding '80',Converter={StaticResource ScreenHeightConverter}}" ItemWidth="255"/> 

回答

2

使用靜態資源引用

後您的Binding不正確的方式被指定。

的方式目前是否指定了Binding你說找一個叫80屬性(即Path)當前設置/通過DataContext財產繼承,並使用其值的對象。

(屬性名稱不能以數字開頭,我想引用的語法來表示Path可能是錯誤的......無論如何因此Binding是錯誤的....你的轉換器不會被調用)。

爲了證實這一點,你可以看看在Visual Studio中的輸出窗口,當你調試應用程序...它應該通知您有錯誤綁定......看到這些鏈接的詳細信息:


我相信你的意圖是讓被傳遞到您的CON一個常量的值轉換器來計算一個合適的值。

而不是使用一個Converter的,你應該看看使用MarkupExtension做.....是的,你可以用一個轉換器「忽悠吧」,通過結合到任意的對象,只是通過你的80值作爲ConverterParameter ....但這不是最好的方法和一個大雜燴。

這裏是寫的MarkupExtension一些鏈接:

...所以創建一個MarkupExtension派生類如HeightAdjustedExtension:MarkupExtension ....在可以匯入傳入數據的擴展上實現ProvideValue方法和「屬性」。

...那麼你可以以這種方式使用它...

ItemHeight="{myns:HeightAdjusted 80}" 

這不是測試,但這樣的事情(給你的東西一起玩):

public class HeightAdjustedExtension : MarkupExtension 
{ 
    [ConstructorArgument("height")] 
    public string Height { get; set; } 

    public HeightAdjustedExtension() { } 

    public HeightAdjustedExtension (string height) 
    { 
     Height = height; 
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     int theheight; 
     int.TryParse(Height, out theheight); 

     double ScreenHeight = (int)Window.Current.Bounds.Height; 
     double factor = 1050/(double)theheight ; 
     return (int)(ScreenHeight/factor);   
    } 
} 
+0

是的,謝謝,你是對的。 如果我使用ConverterParameter工作,它確實不是最好的方法,但我不知道如果MarkupExtension是一種替代方案。 – user1572130

+0

我想在很多地方使用這個Convereter來修復平板電腦的高度和寬度以及其他分辨率。 – user1572130

0

您需要創建轉換器的資源。

首先您需要添加namespace。例如

xmlns:converter="clr-namespace:SDKSample;assembly=SDKSampleLibrary" 

接下來,您需要資源添加到適當的地方(UserControlWindowApp或其他物體)

<UserControl.Resources> 
<converter:ScreenHeightConverter x:key="screenHeightConverter"/> 
</UserControl.Resources> 

最後,你可以通過鍵屬性值是指靜態資源。在這種情況下爲"screenHeightConverter"。您可以在綁定

<VariableSizedWrapGrid Margin="3" ItemHeight="{Binding '80',Converter={StaticResource screenHeightConverter}}" ItemWidth="255"/> 
+0

對不起,我忘了提及,轉換器已經在應用程序資源 – user1572130

+0

已準備好您的綁定似乎不正確。檢查@colinsmith的答案。 – Tilak