WPF:通过更改细节级别来适应大小的变化

WPF:通过更改细节级别来适应大小的变化,wpf,layout,datatemplate,Wpf,Layout,Datatemplate,假设视图包含客户列表。默认情况下,该视图会显示大量屏幕状态,并用客户的详细信息填充该视图。列表中的每个项目都可以用大字体显示客户的姓名,第二行用小字体显示地址。可能是一些统计数据,如以前订单的总数等 现在,如果用户缩小窗口,它希望有足够的空间容纳所有这些细节。处理这个问题的正确方法是什么?是否有某种方式可以绑定每个项目使用的datatemplate 现在,如果用户使窗口变得更小,是否有可能将列表全部删除?用显示客户数量的标签或其他东西来代替它 对如何解决这个问题有什么建议吗? 你知道有任何演示类

假设视图包含客户列表。默认情况下,该视图会显示大量屏幕状态,并用客户的详细信息填充该视图。列表中的每个项目都可以用大字体显示客户的姓名,第二行用小字体显示地址。可能是一些统计数据,如以前订单的总数等

现在,如果用户缩小窗口,它希望有足够的空间容纳所有这些细节。处理这个问题的正确方法是什么?是否有某种方式可以绑定每个项目使用的datatemplate

现在,如果用户使窗口变得更小,是否有可能将列表全部删除?用显示客户数量的标签或其他东西来代替它

对如何解决这个问题有什么建议吗?
你知道有任何演示类似的东西吗?

我会通过转换器将控件的可见性属性绑定到窗口的宽度(或高度,取决于布局)来实现这一点。考虑这样的事情:

public class HideIfSmallConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var c = value as IComparable;
        if (c == null) return Visibilty.Visible;

        return c.CompareTo(parameter) < 0 ? Visibility.Collapsed : Visibility.Visible;
    }
}
public类HideIfSmallConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
var c=作为i可比较的值;
如果(c==null)返回visiblity.Visible;
返回c.CompareTo(参数)<0?可见性。折叠:可见性。可见;
}
}
现在我们有了一个比较器,如果值小于给定的参数,它将允许我们折叠元素。我们可以这样使用:

<ListBox Visibility="{Binding ActualWidth,RelativeSource={RelativeSource FindAncestor,AncestorType=Window},Converter={StaticResource hideIfSmall},ConverterParameter=400}" />

因此,如果窗口的宽度降到400以下,列表框就会崩溃


所有这些都没有经过测试,但希望它能给您一些想法。

这是一个简单的可见或不可见的解决方案。切换一个数据模板怎么样?有可能吗?我想有可能。如果转换器返回一个类似布尔值的离散值,则当窗口缩小到某个宽度以下时,可以使用样式中的DataTrigger来更改模板。