這是不工作的權利:綁定菜單項來器isChecked設置
<MenuItem x:Uid="MenuItem_12" Header="400%" IsCheckable="True"
IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor, Converter={StaticResource IsValidZoomFactor}, ConverterParameter='400'}"/>
在我Settings
我有一個整數ZoomFactor
。設置設置爲公開和範圍用戶。
在我的XAML的頂部我有一個命名空間:
xmlns:Properties="clr-namespace:OCLMEditor.Properties"
這是我ValueConverter
:
using System;
using System.Globalization;
using System.Windows.Data;
namespace OCLMEditor.ValueConverters
{
[ValueConversion(typeof(int), typeof(bool))]
public class IsCurrentZoomFactor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int desiredZoomFactor = (int)value;
int currentZoomFactor = (int)parameter;
return desiredZoomFactor == currentZoomFactor;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
但我得到一個錯誤:
1>D:\My Programs\OCLMEditor\OCLMEditor\MainWindow.xaml(143,35): error MC3044: The text '}' is not allowed after the closing '}' of a MarkupExtension expression. Line 143 Position 35.
我有其他幾個菜單項:
<MenuItem x:Uid="MenuItem_13" Header="300%" IsCheckable="True"/>
<MenuItem x:Uid="MenuItem_14" Header="250%" IsCheckable="True"/>
<MenuItem x:Uid="MenuItem_15" Header="200%" IsCheckable="True"/>
<MenuItem x:Uid="MenuItem_16" Header="175%" IsCheckable="True"/>
<MenuItem x:Uid="MenuItem_17" Header="150%" IsCheckable="True"/>
<MenuItem x:Uid="MenuItem_18" Header="125%" IsCheckable="True"/>
我不知道我要對這個正確的方式,但這個想法是:
- 傳遞Settings.ZoomFactor價值的轉換器。
- 將預期的縮放係數值傳遞給轉換器。
- 將它們兩者進行比較,如果它們相同,則將其設置爲檢查。
此外,此刻它被「改變」,所以另一個縮放因子,設置被更新。我認爲對「環境」的約束是正確的路要走。但有錯誤。
我確認錯誤是在IsChecked
行:
更新錯誤:
自身此位無視覺誤差:
<MenuItem x:Uid="MenuItem_12" Header="400%" IsCheckable="True"
IsChecked="{Binding Source={x:Static Properties:Settings.Default}, Path=ZoomFactor}"/>
所以它是轉換器/值的介紹,它出錯了。
現在,我不得不改變我的轉換器:
using System;
using System.Globalization;
using System.Windows.Data;
namespace OCLMEditor.ValueConverters
{
[ValueConversion(typeof(int), typeof(bool))]
public class IsCurrentZoomFactor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int currentZoomFactor = (int)value;
string strDesiredZoomFactor = (string)parameter;
int desiredZoomFactor = int.Parse(strDesiredZoomFactor);
return desiredZoomFactor == currentZoomFactor;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
因爲我們傳遞「400」這是一個字符串。所以我必須將其轉換爲整數。如果我刪除了'',它不會接受將它作爲整數傳遞。
是否確定菜單項是什麼就行143 /位置35?該錯誤表示在綁定或其他方面存在孤立關閉花括號:'Foo =「{Binding Bar}}」'例如 –
@EdPlunkett花括號確實是正確的。 –
他們確實顯示正確。這不是單引號,他們在你有他們的地方都很好。沒有別的東西在那邊,對嗎?你是否清理解決方案,重新啓動VS並構建?當XAML編輯似乎正在失去主意時,總是值得嘗試。 –