編輯:請參閱下面的我找到的解決方案。WPF組合框SelectedItem不與ItemsSource
我試圖創建在拉從Fonts.SystemFontFamilies所有可用的字體,然後選擇根據項目設置的WPF/C#組合框。
我遇到的問題是,該的ItemsSource工作,但的SelectedItem綁定設置中清除設置當Mode =雙向,或不選擇當Mode =單向的項目。
這裏是我的XAML:
<ComboBox Name="customFontFace" SelectionChanged="customFontFace_SelectionChanged" ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}" SelectedItem="{Binding Default.CustomFontFace, Source={StaticResource Settings}, Mode=TwoWay}" />
而後面的代碼一點點:
public Settings()
{
InitializeComponent();
customFontFace.SelectedItem = MyApplication.Properties.Settings.Default.CustomFontFace;
}
private void customFontFace_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// Doing nothing as of yet
}
在Settings.settings,爲CustomFontFace默認設置爲索拉。如果我添加一些日誌記錄輸出,我會看到該設置顯示Consolas,但根據設置綁定模式,可能會被組合框遮住,或者不會更新組合框,具體取決於設置綁定模式。
我試過所有的模式,並嘗試在幾個地方設置SelectedItem,我就空了。有什麼想法嗎?
編輯:找到我的答案。通過將字符串的CustomFontFace類型更改爲System.Windows.Media.FontFamily,該綁定按預期工作。由於有一個FontFamily(字符串源)構造函數,因此「Consolas」的默認值仍然有效。
我仍然無法在代碼隱藏方面完美地工作,但這是一個更簡單的解決方案。作爲參考,如果我用這個在我的代碼隱藏,它的工作,但前提是XAML有對的SelectedItem綁定:
customFontFace.SelectedValue = Fonts.SystemFontFamilies.FirstOrDefault(x => x == MyApplication.Properties.Settings.Default.CustomFontFace);
有事時CustomFontFace是一個字符串,並且兩個XAML綁定和代碼 - 後面嘗試設置SelectedValue,其中組合框值最終爲空白。我沒有足夠的日誌來查看到底發生了什麼。
它是如何去無'customFontFace.SelectedItem = ...'? – dytori