C# UWP画布动态内容

C# UWP画布动态内容,c#,canvas,uwp,binding,C#,Canvas,Uwp,Binding,我希望能够在画布上动态添加不同的(自行创建的)“小部件”,并使用canvas.Top和canvas.Left对它们进行定位 我已经能够使用Canvas.Children.add()添加项目,但是我不知道如何创建到顶部和左侧值的绑定。 将Canvas的内容绑定到一个列表并在XAML中创建所有绑定是不是更好?再说一遍,我该怎么做呢?如果您不知道UWP中的绑定,您可以看到这一点 根据您的情况,您可以考虑使用MVVM进行绑定,在代码后面创建 VIEWSMODS并在XAML中使用绑定< /代码>绑定相关属

我希望能够在画布上动态添加不同的(自行创建的)“小部件”,并使用
canvas.Top
canvas.Left
对它们进行定位

我已经能够使用
Canvas.Children.add()
添加项目,但是我不知道如何创建到
顶部
左侧
值的绑定。
Canvas
的内容绑定到一个列表并在XAML中创建所有绑定是不是更好?再说一遍,我该怎么做呢?

如果您不知道UWP中的绑定,您可以看到这一点

根据您的情况,您可以考虑使用MVVM进行绑定,在代码后面创建<代码> VIEWSMODS并在XAML中使用<代码>绑定< /代码>绑定相关属性。 CanvasPageViewModel.cs

公共类CanvasPageViewModel:INotifyPropertyChanged
{
私人双方头;
公共双矩形车顶
{
get=>\u rectTop;
设置
{
_rectTop=值;
OnPropertyChanged();
}
}
私人双左;
公共双矩形
{
get=>\u rectlft;
设置
{
_矩形左=值;
OnPropertyChanged();
}
}
公共事件属性更改事件处理程序属性更改;
公共void OnPropertyChanged([CallerMemberName]字符串propertyName=”“)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
}
CanvasPage.xaml.cs

publicCanvasPageViewModelViewModel=新建CanvasPageViewModel();
公众拉票页()
{
this.InitializeComponent();
this.DataContext=viewModel;
viewModel.RectTop=20;
viewModel.rectlight=100;
}
CanvasPage.xaml


这是一个简单的例子。如果以后要修改控件的位置,可以直接修改数据源,UI将同步


更新

如果需要手动添加画布的子元素,可以使用以下方法:

var myRect=new Rectangle()
{ 
高度=50,
宽度=100,
填充=新的SolidColorBrush(颜色:蓝色)
};
myCanvas.Children.Add(myRect);
但是,如果要绑定创建的矩形元素,如前所述,请绑定
Canvas.Left
属性,您可以编写:

publicCanvasPageViewModelViewModel=新建CanvasPageViewModel();
公众拉票页()
{
this.InitializeComponent();
var myRect=新矩形()
{ 
高度=50,
宽度=100,
填充=新的SolidColorBrush(颜色:蓝色)
};
Binding leftBinding=新绑定()
{ 
路径=新属性路径(“RectLeft”),
Mode=BindingMode.OneWay
};
myRect.SetBinding(Canvas.LeftProperty,leftBinding);
myCanvas.Children.Add(myRect);
}

致以最诚挚的问候。

如果您不知道UWP中的绑定,您可以看到这一点

根据您的情况,您可以考虑使用MVVM进行绑定,在代码后面创建<代码> VIEWSMODS并在XAML中使用<代码>绑定< /代码>绑定相关属性。 CanvasPageViewModel.cs

公共类CanvasPageViewModel:INotifyPropertyChanged
{
私人双方头;
公共双矩形车顶
{
get=>\u rectTop;
设置
{
_rectTop=值;
OnPropertyChanged();
}
}
私人双左;
公共双矩形
{
get=>\u rectlft;
设置
{
_矩形左=值;
OnPropertyChanged();
}
}
公共事件属性更改事件处理程序属性更改;
公共void OnPropertyChanged([CallerMemberName]字符串propertyName=”“)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
}
CanvasPage.xaml.cs

publicCanvasPageViewModelViewModel=新建CanvasPageViewModel();
公众拉票页()
{
this.InitializeComponent();
this.DataContext=viewModel;
viewModel.RectTop=20;
viewModel.rectlight=100;
}
CanvasPage.xaml


这是一个简单的例子。如果以后要修改控件的位置,可以直接修改数据源,UI将同步


更新

如果需要手动添加画布的子元素,可以使用以下方法:

var myRect=new Rectangle()
{ 
高度=50,
宽度=100,
填充=新的SolidColorBrush(颜色:蓝色)
};
myCanvas.Children.Add(myRect);
但是,如果要绑定创建的矩形元素,如前所述,请绑定
Canvas.Left
属性,您可以编写:

publicCanvasPageViewModelViewModel=新建CanvasPageViewModel();
公众拉票页()
{
this.InitializeComponent();
var myRect=新矩形()
{ 
高度=50,
宽度=100,
填充=新的SolidColorBrush(颜色:蓝色)
};
Binding leftBinding=新绑定()
{ 
路径=新属性路径(“RectLeft”),
Mode=BindingMode.OneWay
};
myRect.SetBinding(Canvas.LeftProperty,leftBinding);
myCanvas.Children.Add(myRect);
}

致以最诚挚的问候。

谢谢,但我的问题似乎表达得不正确。我要寻找的是一种向画布添加新UI元素的方法,最好使用某种绑定。您好,您想使用类似于
ListView.ItemsSource的画布吗?这可能不符合绑定的设计。绑定意味着绑定数据,而不是绑定
ui元素
。您可以使用
myCanvas.Children.add(uiElement)
手动添加子元素,但不建议使用绑定来完成它。是的,这就是我想要的。但是使用
Canva