我正在尝试从ItemsControl中呈现usercontrol,CharacterEditorView。 (使用" Canvas"可以更改ItemsPanelTemplate,Grid?)。 CharacterEditorView将覆盖在字符串的顶部,因此位置至关重要。 ItemsControl是:
<ItemsControl Grid.Row="0" Grid.RowSpan="1" ItemsSource="{Binding CharacterPads}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Control.Margin" Value="{Binding Margin}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
其中CharacterPads的绑定定义为:
private ObservableCollection<CharacterEditorViewModel> characterPads = new ObservableCollection<CharacterEditorViewModel>();
public ObservableCollection<CharacterEditorViewModel> CharacterPads
{
get
{
return characterPads;
}
}
我想在一个特定的矩形中呈现EACH CharacterEditorView,这个矩形只在创建viewmodel时才知道。也就是说,每个CharacterEditorView都会有不同的 要呈现的矩形:
<UserControl x:Class="Nova5.UI.Views.CharacterEditorView"
.................................................................
<Grid Background="Red">
<TextBlock Text="TextBlock" Margin="{Binding ...?????}" />
</Grid>
</UserControl>
将EACH CharacterEditorView定位在自己的位置需要什么绑定?
感谢任何想法。
答案 0 :(得分:1)
如果要绑定TextBlock的Margin
,则需要CharacterEditorViewModel
中的Thickness
类型的可绑定属性,并将其指定为绑定目标(或者,对于更清晰的代码,提供ViewModel中的数字属性,并实现一个ValueConverter,用于创建Thickness
实例。
或者,由于ItemsPanelTemplate已定义为Canvas
,因此将这些数字属性直接绑定到Canvas.Left
和Canvas.Top
,正如HighCore所建议的那样。