2016-01-20 137 views
0

編輯:請參閱下面的我找到的解決方案。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,其中組合框值最終爲空白。我沒有足夠的日誌來查看到底發生了什麼。

+0

它是如何去無'customFontFace.SelectedItem = ...'? – dytori

回答

0

以什麼形式存儲您的默認值?如果你把它作爲一個字符串,你可能需要做一些事情,如:

customFontFace.SelectedItem = Fonts.SystemFontFamilies.FirstOrDefault(MyApplication.Properties.Settings.Default.CustomFontFace); 

由於WPF使用.Equals方法制定出選擇哪個項目,如果你在一個字符串傳遞它可能無法正常工作。

如果你想使用XAML來做到這一點,你可以這樣做:

<ComboBox 
      ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}" 
      DisplayMemberPath="Source" 
      SelectedValuePath="Source" 
      SelectedValue="{Binding Source={x:Static myapplication:Settings.Default}, Path=CustomFontFace}"/> 

我希望這有助於:)

+0

這非常接近我所需要的。這結束了工作: 'customFontFace.SelectedValue = Fonts.SystemFontFamilies.FirstOrDefault(X => x.Source == MyApplication.Properties.Settings.Default.CustomFontFace);' 的XAML拋出一個錯誤對我來說,「 WPF應用程序不支持設置。「 –

+0

編輯到上面:我找到了一個更簡單的解決方案。通過將Settings.Default.CustomFontFace的類型從字符串更改爲System.Windows.Media.FontFamily,XAML不需要代碼隱藏。用這個更新問題。 –

相關問題