以编程方式解决在xaml中创建的画布

继续

我正在使用MVVM方法在WPF中创建一个应用程序。我对这个话题还很陌生,我正在寻找如何实现以下目标的指针:我已经在XAML中创建了画布,如下所示:

<canvas name = "myCanvas">
...
</canvas>

我也在XAML中添加了一个按钮,我想使用该按钮在鼠标单击时在程序上绘制(编程)一些基本形状(线,矩形等)。由于我使用的是MVVM方法,因此必须将按钮的命令绑定到一种方法,如下所示:

<Button name="myButton" Command="{Binding myMethod, Mode=OneWay}">
...
</Button>

我使绑定本身可以正常工作,并使用C#创建了图形和形状,但是我不知道如何将形状放在XAML中创建的画布上。如何通过我的方法处理XAML中预制的画布?我该怎么办?

编辑:

关键是我想根据数据生成形状以使其可视化。因此,如果我的输入有3个类型A的元素,我想创建3个矩形并将它们显示在画布上。稍后,我想使它们可单击,并在单击时显示有关它们的一些信息。MVVM是我的既定要求。

克莱门斯

在视图模型中,您应该具有不使用任何UI元素的形状表示形式:

public class ShapeItem
{
    public Geometry Geometry { get; set; }
    public Brush Fill { get; set; }
    public Brush Stroke { get; set; }
}

public class ViewModel
{
    public ObservableCollection<ShapeItem> ShapeItems { get; set; }
}

然后,您将使用带有适当的ItemsControlItemsPanelItemTemplate可视化形状项:

<ItemsControl ItemsSource="{Binding ShapeItems}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Path Data="{Binding Geometry}"
                  Fill="{Binding Fill}"
                  Stroke="{Binding Stroke}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

可以如下所示初始化视图模型,并在执行适当的命令方法时类似地添加项目:

var vm = new ViewModel();
vm.ShapeItems = new ObservableCollection<ShapeItem>();
vm.ShapeItems.Add(
    new ShapeItem
    {
        Geometry = new EllipseGeometry(new Point(100, 100), 100, 50),
        Fill = Brushes.LightBlue
    });
vm.ShapeItems.Add(
    new ShapeItem
    {
        Geometry = new RectangleGeometry(new Rect(150, 100, 200, 100)),
        Fill = Brushes.Azure,
        Stroke = Brushes.Black
    });

DataContext = vm;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在xaml中创建的DataGrid列-如何以编程方式填充?

来自分类Dev

在Windows Phone中以编程方式添加XAML

来自分类Dev

以编程方式在 XAML 中查找和替换

来自分类Dev

如何从XAML中定义的数据模板以编程方式创建元素?

来自分类Dev

以编程方式禁用在XAML中创建的样式触发器

来自分类Dev

如何以编程方式在WPF xaml定义的画布上绘制简单形状

来自分类Dev

在XAML中以编程方式在两列中拆分特定行

来自分类Dev

在Swift中以编程方式创建NSTextField

来自分类Dev

在Swift中以编程方式创建UITableViewCell

来自分类常见问题

在Swift中以编程方式创建UIButton

来自分类Dev

在Swift中以编程方式创建UITableViewController

来自分类Dev

在Woocommerce中以编程方式创建新订单

来自分类Dev

在appdelegate中以编程方式创建tabBarController

来自分类Dev

以编程方式在vTiger 6中创建用户

来自分类Dev

在Watch Kit中以编程方式创建imageView

来自分类Dev

在ArangoDB中以编程方式创建边缘

来自分类Dev

在Wagtail中以编程方式创建重定向

来自分类Dev

多个ListViews在Android中以编程方式创建

来自分类Dev

在Xamarin Studio中以编程方式创建NSView

来自分类Dev

在ActionScript错误中以编程方式创建对象

来自分类Dev

在Flex中以编程方式创建网格

来自分类Dev

在iOS中以编程方式创建UINavigationController

来自分类Dev

在Swift中以编程方式创建UITableViewCell

来自分类Dev

在Swift中以编程方式创建NSTextField

来自分类Dev

在Azure中以编程方式创建webjobs

来自分类Dev

以编程方式在prestashop中创建订单

来自分类Dev

在iOS Swift中以编程方式创建Segues

来自分类Dev

在 Anylogic 中动态/以编程方式创建资源

来自分类Dev

在 Jena 中以编程方式创建 BIND 子句

Related 相关文章

热门标签

归档