2

我对 WPF 比较陌生,有人可以指点我最好的方法吗?

我将创建一个带有连接块的线的框图。这些盒子都将排成一排,所以我在想一个带有矩形和线条的水平对齐的堆栈面板。

矩形用于填充标签页,并且是可点击的。

问题是直到运行时我才知道会有多少个矩形。

什么是正确的方法,应该在代码隐藏中找出矩形的数量并添加和定位它们以及代码中的行,还是我可以在 XAML 中做一些更灵活的事情?

矩形的数量在 2 到 10 之间,所以如果是 2,我不希望它们填满选项卡的整个宽度。所以理想情况下,我希望矩形具有最小和最大宽度并居中,所以它看起来仍然很漂亮。

提前谢谢了

4

2 回答 2

2

执行类似操作的正确方法是使用它<ItemsControl>并将其绑定ItemsSource到模型的一部分,该部分表示图块的集合。数据绑定是 WPF 的一个非常强大的部分。不幸的是,它也太复杂而无法在答案中快速描述,所以我建议阅读一些文章/代码示例以加快速度。

如果您对块使用ObservableCollection<DiagramBlock>(或任何其他实现的集合INotifyCollectionChanged),则在代码中添加或删除块将导致 UI 相应更改。

于 2013-05-15T00:07:42.363 回答
0

这是一个示例,用于在运行时(代码隐藏)中databinding添加多个控件(button此处)。应该是一个很好的起点。

而且,如果加载表单后数据会发生变化,您可以实现INotifyPropertyChange并相应地更新

MainWindow.xaml:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" >
        <ItemsControl ItemsSource="{Binding YourCollection}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
</Window>

主窗口.xaml.cs

    public MainWindow()
    {
        InitializeComponent();

        YourCollection = new List<Button>();


        //Dummy Data for Demo 
        YourCollection.Add(new Button() { Height = 25, Width = 25 });
        YourCollection.Add(new Button() { Height = 25, Width = 25 });

        this.DataContext = this;

    }

    public List<Button> YourCollection { get; set; }
于 2013-05-15T02:41:37.323 回答