C# 使用画布在ItemsControl上定位XAMLUI元素
我正在构建一个Windows通用应用程序,需要在画布上放置一些元素。因为我想使用这种MVVM样式,所以我读到应该使用ItemsControl。问题是,我找到的所有解决方案都是针对WPF或Silverlight的,不适用于Windows Universal。它们出现在画布上,但它们一直将自己定位在左上角 XAML: 视图模型和模型:C# 使用画布在ItemsControl上定位XAMLUI元素,c#,xaml,canvas,mvvm,win-universal-app,C#,Xaml,Canvas,Mvvm,Win Universal App,我正在构建一个Windows通用应用程序,需要在画布上放置一些元素。因为我想使用这种MVVM样式,所以我读到应该使用ItemsControl。问题是,我找到的所有解决方案都是针对WPF或Silverlight的,不适用于Windows Universal。它们出现在画布上,但它们一直将自己定位在左上角 XAML: 视图模型和模型: class MyItemViewModel { ObservableCollection<MyItem> _myItems; publ
class MyItemViewModel
{
ObservableCollection<MyItem> _myItems;
public MyItemViewModel()
{
_myItems = new ObservableCollection<MyItem>();
_myItems.Add(new MyItem(10, 10, "First TextBlock"));
_myItems.Add(new MyItem(200, 400, "2nd TextBlock"));
_myItems.Add(new MyItem(400, 200, "The Third TextBlock"));
}
public ObservableCollection<MyItem> MyItems
{
get { return _myItems; }
set { _myItems = value; }
}
}
public class MyItem
{
public MyItem(double left, double top, string text)
{
Left = left;
Top = top;
Text = text;
}
public double Left { get; set; }
public double Top { get; set; }
public string Text { get; set; }
}
类MyItemViewModel
{
可观察的收集项目;
公共MyItemViewModel()
{
_myItems=新的ObservableCollection();
_添加(新的MyItem(10,10,“第一个文本块”);
_添加(新的MyItem(200400,“第二个文本块”);
_添加(新的MyItem(400200,“第三个文本块”);
}
公共可观测集合MyItems
{
获取{return\u myItems;}
设置{u myItems=value;}
}
}
公共类MyItem
{
公共MyItem(双左、双顶部、字符串文本)
{
左=左;
顶部=顶部;
文本=文本;
}
公共双左{get;set;}
公共双顶部{get;set;}
公共字符串文本{get;set;}
}
使用框架元素
作为目标类型
:
<ItemsControl.ItemContainerStyle>
<Style TargetType="FrameworkElement">
<Setter Property="Canvas.Left" Value="{Binding Left}" />
<Setter Property="Canvas.Top" Value="{Binding Top}" />
</Style>
</ItemsControl.ItemContainerStyle>
使用
框架元素
作为目标类型
:
<ItemsControl.ItemContainerStyle>
<Style TargetType="FrameworkElement">
<Setter Property="Canvas.Left" Value="{Binding Left}" />
<Setter Property="Canvas.Top" Value="{Binding Top}" />
</Style>
</ItemsControl.ItemContainerStyle>
我不同意可能的副本。我看到了这些项目,但它们没有例外。他们只是停留在左上角。我认为你的TargetType
是错误的。请尝试以下操作:TargetType=“{x:Type UIElement}”
。如果不起作用,请尝试完全删除TargetType
属性。经过短暂搜索后,Windows Universal apps可能不支持这种样式的绑定类型(问题实际上可追溯到WinRT和Silverlight之前)。看,和。可能的副本我不同意。我看到了这些项目,但它们没有例外。他们只是停留在左上角。我认为你的TargetType
是错误的。请尝试以下操作:TargetType=“{x:Type UIElement}”
。如果不起作用,请尝试完全删除TargetType
属性。经过短暂搜索后,Windows Universal apps可能不支持这种样式的绑定类型(问题实际上可追溯到WinRT和Silverlight之前)。看,还有。如果你不使用它,它就不会编译了。我还以为你在使用WPF呢。尝试添加FrameworkElement的目标类型。如果您不使用它,它不会被编译。我还以为您在使用WPF呢。尝试添加FrameworkElement的目标类型。
<ItemsControl.ItemContainerStyle>
<Style TargetType="FrameworkElement">
<Setter Property="Canvas.Left" Value="{Binding Left}" />
<Setter Property="Canvas.Top" Value="{Binding Top}" />
</Style>
</ItemsControl.ItemContainerStyle>