我有一个带有最小化控件的应用程序。最小化的项目显示在水平堆栈面板中。调整大小(缩小)时,由于空间太小,可能会切碎项目。
为了避免这种情况,我的想法是将切碎的元素移至可扩展控件(like this)

该应用程序遵循MVVM模式,面板中的项目位于绑定(bind)到 View 模型的ItemsControl中。

我现在的实现是使用一个自定义面板,在其中将切碎的元素分配给属性“SpillOverElements”。我想将另一个控件(面板,扩展器或弹出窗口)绑定(bind)到此属性。问题是我无法绑定(bind)到ItemsControl内“SpillOverPanel”的“SpillOverElements”属性。

<ItemsControl>
    ItemTemplate="{StaticResource DummyContentDataTemplate}"
    ItemsSource="{Binding DisplayElementsCollection}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <local:SpillOverPanel />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
</ItemsControl>

因此,问题是如何绑定(bind)到“SpillOverPanel”的“SpillOverElements”属性。也欢迎任何其他实现此想法的想法。我不确定我的方法是否正确。

在此先感谢您的帮助!

最佳答案

请原谅,下面的文字中有很多吐槽。

单个可重复使用的ItemsControl类

这可能是一个相当复杂的实现。对于溢出控件中显示的项目,您可能需要以“SpilloverItemsControl”类和“SpilloverItem”类的形式创建全新的WPF控件,以用作项目容器。 SpilloverItemsControl类当然将从ItemsControl继承。

SpilloverItem容器将公开一个属性“IsSpilledOver”(或类似的东西),父控件将根据各种大小和可见性计算将其自动设置为truefalse

您的SpilloverItemsControl类将作为一种复合控件进行布局,在其ControlTemplate中提供2个不同的ItemsControls-如果将“IsSpilledOver”设置为“false”,则其项目的“可见性”将设置为“可见”,如果未设置,则将其设置为“Collapsed” ;另一个用作“溢出”区域,该区域仅显示“IsSpilledOver”设置为true的项目。

一种替代方法

一种替代方法(但重用性稍差)是在项目ViewModel中存在“IsSpilledOver”属性,并创建一个最小的Behavior以确定何时将其设置为true或false。然后在 View 中,您将再次将两个不同的ItemsControl绑定(bind)到同一集合。一种显示“未溢出”项目,另一种显示“溢出”项目。可见性将在您的ItemTemplate中设置。

关于c# - WPF-面板可扩展控制切碎的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27797385/

10-11 22:33
查看更多