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