C# WPF-具有可扩展控制的短切元件面板

C# WPF-具有可扩展控制的短切元件面板,c#,wpf,mvvm,panel,C#,Wpf,Mvvm,Panel,我有一个带有最小化控件的应用程序。最小化的项目显示在水平堆叠面板中。在调整应用程序项的大小时,由于空间太小,应用程序项的收缩可能会被切碎。 为了避免这种情况,我的想法是将切碎的元素移动到一个可扩展的控件中 应用程序遵循MVVM模式,面板中的项位于绑定到视图模型的ItemsControl中 我现在的实现是使用一个自定义面板,其中切碎的元素与属性元素一起分发。我想将另一个控制面板、扩展器或弹出窗口绑定到此属性。问题是我无法绑定到ItemsControl内的溢出面板的溢出元素属性 <ItemsC

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

应用程序遵循MVVM模式,面板中的项位于绑定到视图模型的ItemsControl中

我现在的实现是使用一个自定义面板,其中切碎的元素与属性元素一起分发。我想将另一个控制面板、扩展器或弹出窗口绑定到此属性。问题是我无法绑定到ItemsControl内的溢出面板的溢出元素属性

<ItemsControl>
    ItemTemplate="{StaticResource DummyContentDataTemplate}"
    ItemsSource="{Binding DisplayElementsCollection}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <local:SpillOverPanel />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
</ItemsControl>  
所以问题是如何绑定溢出面板的溢出元素属性。任何其他如何实现这一点的想法都是受欢迎的。我不确定我的方法是否正确


提前感谢您的帮助

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

一个可重用的ItemsControl类

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

溢出项容器将公开一个属性-IsSpilledOver或类似的属性,父控件将根据各种大小和可见性计算自动将其设置为true或false

您的溢出项控件类将作为一种复合控件进行布局,在其控件模板中提供两个不同的项控件-其中一个项的可见性将在IsSpilledOver设置为“false”时设置为可见,否则设置为“折叠”;另一个用作“溢出”区域,仅显示IsSpilledOver设置为true的项目

另一种方法


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

为什么不扔掉StackPanel,使用一个显示滚动条的网格,让用户能够滚动到隐藏的控件呢?有点老套,但是你可以通过RelativeSource将你的元素属性绑定到ItemsControl.Tag属性。然后您可以将StackPanel绑定到它。