C# WPF用什么布局让里面的图片自动排列

谢谢大神啦这个我完全没有思路啊... 谢谢 大神啦 这个我完全没有思路啊 展开
 我来答
FoolRabbit编程
推荐于2016-11-04 · 知道合伙人数码行家
FoolRabbit编程
知道合伙人数码行家
采纳数:619 获赞数:3805
毕业于苏州大学,4年编程经验,对WPF有研究。

向TA提问 私信TA
展开全部

以字符串为例给你举个例子。

主要使用UnifromGrid布局,通过转换器来计算行数。

如有疑问,继续追问。

XAML代码:

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <ListBox x:Name="lb" ItemsSource="{Binding LBSource}">
            <ListBox.Resources>
                <local:RowConverter x:Key="RowConverter"/>
            </ListBox.Resources>
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Rows="{Binding ElementName=lb,Path=ItemsSource,Converter={StaticResource RowConverter},Mode=OneWay}"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>
        <Button Grid.Row="1" Content="添加一个" Click="Button_Click"/>
    </Grid>

CS代码:

    public partial class Window1 : Window
    {
        public List<string> LBSource
        {
            get { return (List<string>)GetValue(LBSourceProperty); }
            set { SetValue(LBSourceProperty, value); }
        }

        public static readonly DependencyProperty LBSourceProperty =
            DependencyProperty.Register("LBSource", typeof(List<string>), typeof(Window1));

        public Window1()
        {
            InitializeComponent();

            LBSource = new List<string>() { "text1" };
            this.DataContext = this;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            List<string> list =new List<string>( LBSource);
            list.Add("text" + (LBSource.Count + 1).ToString());
            LBSource = list;
        }
    }

转换器代码:

    public class RowConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
            {
                return 0;
            }
            int i = (value as IList).Count;
            if (i <= 2)
            {
                return i;
            }
            else if (i <= 6)
            {
                return 3;
            }
            else
            {
                return 4;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

实现效果:

追问
要是图片呢? 不是牵涉到绑定的问题么?
追答
关键看你用什么方式,我只是给你个思路,用不用绑定都能实现。
wangyu20052005
2014-11-17 · TA获得超过436个赞
知道小有建树答主
回答量:348
采纳率:0%
帮助的人:112万
展开全部
按照什么排列呢
更多追问追答
追问
在一个grid布局中,里面有一些图标,这个事可以根据用户需求来升级的,当两个图标就两行显示,6个图片就三行显示,而且图片的大小会跟着行数的变化而变化
追答
根据你说的,我有个思路:
1、首先Grid的宽是固定的,如800
2、代码中根据图片数量判断当前需要显示的行数和列数(读取配置文件可以动态设置)。
3、例如:判断是6个图片,分3行显示,每行2个
4、那么 可以在代码中 设置Grid有3行,每行中一个ListBox,注意设置ListBox的ItemPanel为StackPanel并且方向是横向的。
5、然后就好办了,每行的ListBox中加两个图片。
6、以上所有的不需要设置width和height,让其自动设置宽高。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式