如何从 ItemsControl(在 MVVM 中)唯一定位用户控件?
How to uniquely position usercontrols from an ItemsControl (in MVVM)?
我正在尝试从 ItemsControl 中显示用户控件 CharacterEditorView。 (在ItemsPanelTemplate中使用"Canvas"可以改,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;
}
}
我想在仅在其视图模型创建时已知的特定矩形内呈现每个 CharacterEditorView。也就是说,每个 CharacterEditorView 都会有不同的
矩形显示在:
<UserControl x:Class="Nova5.UI.Views.CharacterEditorView"
.................................................................
<Grid Background="Red">
<TextBlock Text="TextBlock" Margin="{Binding ...?????}" />
</Grid>
</UserControl>
需要什么绑定才能将每个 CharacterEditorView 定位在自己的位置?
感谢任何想法。
如果您想要绑定 TextBlock 的 Margin
,您需要 CharacterEditorViewModel
中一些 Thickness
类型的可绑定 属性 并将其指定为绑定目标(或,为了更简洁的代码,在 ViewModel 中提供数字属性并实现一个 ValueConverter,从中创建一个 Thickness
实例)。
或者,由于 ItemsPanelTemplate 已被定义为 Canvas
,请按照 HighCore 的建议将这些数字属性直接绑定到 Canvas.Left
和 Canvas.Top
。
我正在尝试从 ItemsControl 中显示用户控件 CharacterEditorView。 (在ItemsPanelTemplate中使用"Canvas"可以改,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;
}
}
我想在仅在其视图模型创建时已知的特定矩形内呈现每个 CharacterEditorView。也就是说,每个 CharacterEditorView 都会有不同的 矩形显示在:
<UserControl x:Class="Nova5.UI.Views.CharacterEditorView"
.................................................................
<Grid Background="Red">
<TextBlock Text="TextBlock" Margin="{Binding ...?????}" />
</Grid>
</UserControl>
需要什么绑定才能将每个 CharacterEditorView 定位在自己的位置?
感谢任何想法。
如果您想要绑定 TextBlock 的 Margin
,您需要 CharacterEditorViewModel
中一些 Thickness
类型的可绑定 属性 并将其指定为绑定目标(或,为了更简洁的代码,在 ViewModel 中提供数字属性并实现一个 ValueConverter,从中创建一个 Thickness
实例)。
或者,由于 ItemsPanelTemplate 已被定义为 Canvas
,请按照 HighCore 的建议将这些数字属性直接绑定到 Canvas.Left
和 Canvas.Top
。