
[英]How to Create a multi-column surfacelistbox with images as items using WPF in C#?
[英]How can I have a multi-column dropdown box in C# WPF?
您可以得到一些创意,并解决此问题。 假设您有一个仅60px宽的组合框。 因此,您希望组合项目显示为完整的州名和缩写,例如CA - California
,但是如果选择,则只希望使用缩写。 CA
我声明一个类来表示这样的状态:
public class State
{
public string ShortName { get; set; }
public string FullName { get; set; }
private string _displayName;
public string DisplayName
{
set
{
_displayName = value;
}
get
{
if (string.IsNullOrEmpty(_displayName))
return string.Format("{0} - {1}", ShortName, FullName);
else
return _displayName;
}
}
}
诀窍是您使用DisplayName
在组合框上显示项目。 然后,在DisplayName
的get
中,如果它已经具有一个值,则将其返回,如果没有,则将状态的简称和全名串联起来。
然后,在进行数据绑定时,将具有状态列表以及SelectedState
,并且在该属性的设置器中,将DisplayName
设置为ShortName
。
所以,我的XAML
:
<Grid>
<ComboBox ItemsSource="{Binding States}"
SelectedValue="{Binding SelectedState}"
DisplayMemberPath="DisplayName"
Name="CmbStates" Width="60" Height="32"/>
</Grid>
然后,在我的代码中:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private List<State> _states;
public List<State> States
{
get { return _states; }
set
{
_states = value;
OnPropertyChanged("States");
}
}
private State _selectedState;
public State SelectedState
{
get { return _selectedState; }
set
{
_selectedState = value;
SelectedState.DisplayName = SelectedState.ShortName;
OnPropertyChanged("SelectedState");
}
}
public MainWindow()
{
InitializeComponent();
States = new List<State>
{
new State() { FullName = "California", ShortName = "CA" },
new State() { FullName = "New York", ShortName = "NY" },
new State() { FullName = "Oregon", ShortName = "OR" }
};
DataContext = this;
}
}
现在,您应该在列表中具有完整的串联名称:
但仅在选择时缩写:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.