WPF 在 ComboBox 中绘制基元
WPF Draw primitives in ComboBox
我正在制作表示网络图的程序。我这里有许多用于两个节点之间连接的属性。实际上我正在尝试制作一个组合框,其中包含 MS Word 中的破折号类型。我的 ComboBox 代码:
<ComboBox ItemsSource="{Binding Dashes}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Canvas >
<Line X1="0" Y1="0" X2="100" Y2="100" StrokeDashArray="{Binding Dash}"/>
</Canvas>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
后面的代码:
private DoubleCollection _dash;
private List<DoubleCollection> _listOfDashes;
public DoubleCollection Dash
{
get { return _dash; }
set
{
_dash = value;
OnPropertyChanged("Dash");
}
}
public List<DoubleCollection> Dashes
{
get { return _listOfDashes; }
set
{
_listOfDashes = value;
OnPropertyChanged("Dashes");
}
}
启动程序后,ComboBox 不是空的(有两个可选对象),但项目是空的。我哪里出错了?
您正在将 ItemsSource
属性 绑定到您的 ViewModel Dashes
属性。这意味着每个 ItemTemplate
都可以绑定到 Dashes
集合的每个元素上(即 DoubleCollection
)。
试试这样改变你的XAML:
<ComboBox ItemsSource="{Binding Dashes}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Line X1="0" Y1="0" X2="100" Y2="0" StrokeDashArray="{Binding}" Stroke="Black" Margin="6" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
这意味着每个 Line
都将其 StrokeDashArray
绑定到属于 Dashes
集合的每个 DoubleCollection
。所以这样:
vm = new ViewModel();
vm.Dashes = new List<DoubleCollection>();
vm.Dashes.Add(new DoubleCollection());
vm.Dashes[0].Add(2);
vm.Dashes[0].Add(3);
vm.Dashes.Add(new DoubleCollection());
vm.Dashes[1].Add(1);
vm.Dashes[1].Add(4);
您会在 ComboBox
中看到两行不同的内容。希望对你有帮助。
我正在制作表示网络图的程序。我这里有许多用于两个节点之间连接的属性。实际上我正在尝试制作一个组合框,其中包含 MS Word 中的破折号类型。我的 ComboBox 代码:
<ComboBox ItemsSource="{Binding Dashes}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Canvas >
<Line X1="0" Y1="0" X2="100" Y2="100" StrokeDashArray="{Binding Dash}"/>
</Canvas>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
后面的代码:
private DoubleCollection _dash;
private List<DoubleCollection> _listOfDashes;
public DoubleCollection Dash
{
get { return _dash; }
set
{
_dash = value;
OnPropertyChanged("Dash");
}
}
public List<DoubleCollection> Dashes
{
get { return _listOfDashes; }
set
{
_listOfDashes = value;
OnPropertyChanged("Dashes");
}
}
启动程序后,ComboBox 不是空的(有两个可选对象),但项目是空的。我哪里出错了?
您正在将 ItemsSource
属性 绑定到您的 ViewModel Dashes
属性。这意味着每个 ItemTemplate
都可以绑定到 Dashes
集合的每个元素上(即 DoubleCollection
)。
试试这样改变你的XAML:
<ComboBox ItemsSource="{Binding Dashes}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Line X1="0" Y1="0" X2="100" Y2="0" StrokeDashArray="{Binding}" Stroke="Black" Margin="6" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
这意味着每个 Line
都将其 StrokeDashArray
绑定到属于 Dashes
集合的每个 DoubleCollection
。所以这样:
vm = new ViewModel();
vm.Dashes = new List<DoubleCollection>();
vm.Dashes.Add(new DoubleCollection());
vm.Dashes[0].Add(2);
vm.Dashes[0].Add(3);
vm.Dashes.Add(new DoubleCollection());
vm.Dashes[1].Add(1);
vm.Dashes[1].Add(4);
您会在 ComboBox
中看到两行不同的内容。希望对你有帮助。