我正在使用“visual studio express for windows 8”并使用Combo Box控件作为
<ComboBox Name="Categories" >
<x:String>apple</x:String>
<x:String>ball</x:String>
<x:String>cat</x:String>
<x:String>dog</x:String>
</ComboBox>
我想在其中显示占位符文字以显示一些文字,直到用户没有从中选择任何项目。但是,当我使用microsoft reference中描述的属性 PlaceholderText 来显示文本时,但是当我使用它时,sdk会显示此错误
无法识别或无法访问成员“PlaceholderText”。
还是有其他任何方法,以便我可以在Combobox中显示一些默认文本。 感谢。
答案 0 :(得分:0)
这适用于Windows 8.1预览版,而不适用于Windows 8开发版。您需要先安装预览,然后才能使用此组合框进行开发。查看占位符的文档,它指出:
Minimum supported client Windows 8.1 Preview
修改
要手动执行此操作,只需手动预加载组合框。这是一个例子,让我们从ViewModel开始,构造函数将初始值加载到名为“Loading”的组合框中
public class MainVM : INotifyPropertyChanged
{
private List<string> _dataList;
public List<string> ComboData
{
get { return _dataList; }
set
{
if (_dataList != value)
{
_dataList = value;
OnPropertyChanged();
}
}
}
public MainVM()
{
ComboData = new List<string> {"Loading..."};
}
#region INotify Property Changed Implementation
/// <summary>
/// Event raised when a property changes.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Raises the PropertyChanged event.
/// </summary>
/// <param name="propertyName">The name of the property that has changed.</param>
public void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
现在在主页面上xaml绑定到ComboData,但我们需要警惕第一种情况,其中一个项目的列表将加载,并且我们想要使所选项目。
<ComboBox ItemsSource="{Binding ComboData}" Height="30" Width="300" Loaded="OnLoaded" />
好的,在页面后面的代码中,我们将datacontext设置为我们之前设置的ViewModel,但也有一个OnLoaded方法,用于检查1项加载情况。在下面的例子中,我们模拟了加载其余数据的3秒延迟。
public sealed partial class MainPage : Page
{
public MainVM ViewModel { get; set; }
public MainPage()
{
this.InitializeComponent();
DataContext = ViewModel = new MainVM();
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
var cBox = sender as ComboBox;
if (cBox != null)
{
if ((cBox.Items != null) && (cBox.Items.Count == 1))
{
cBox.SelectedIndex = 0;
// Debug code to simulate a change
Task.Run(() =>
{
// Sleep 3 seconds
new System.Threading.ManualResetEvent(false).WaitOne(3000);
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{ ViewModel.ComboData = new List<string> {"Alpha", "Gamma", "Omega"}; });
});
}
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
}