C# wpf怎么在grid添加自定义控件时显示滚动条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# wpf怎么在grid添加自定义控件时显示滚动条相关的知识,希望对你有一定的参考价值。

参考技术A 你应该先在Grid中加
ScrollView
,然后再在ScrollView中再添加一个容器(比如Grid),你再将自定义控件加入到第二个Grid中。
而且我不推荐你在对WPF有更深入的了解后这么做,我更建议你创建一个控件,继承ListView或ListBox,修改模板,然后自定义事件,最后通过绑定来实现。
参考技术B 可通过onscroll事件触发,通过scrolltop获取滚动高度。
如:
document.getelementsbytagname("body")[0].onscroll=function()if(document.getelementsbytagname("body")[0].scrolltop>600)alert("网页太长");本回答被提问者采纳

自定义 UITableViewCell 在滚动时显示完整单元格之前不显示数据

【中文标题】自定义 UITableViewCell 在滚动时显示完整单元格之前不显示数据【英文标题】:custom UITableViewCell doesn't show data before showing full cell when scrolling 【发布时间】:2014-10-09 05:48:07 【问题描述】:

我的应用程序有自定义 UITableViewCell 高度为 470 像素。 我完全以编程方式创建了自定义单元格。

这是我的 cellForRowAtIndexPath 方法

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

pixDealsTableViewCell *dealCell = (pixDealsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Deals" forIndexPath:indexPath];

if (dealCell == nil) 

    dealCell = [[pixDealsTableViewCell alloc] init];


dealCell.dBusinessLogo.image = [pixUtil imageWithImage:[UIImage imageNamed:@"profile_icon"] scaledToSize:CGSizeMake(60, 60)];
[dealCell.dBusinessName setTitle:@"Business Name" forState:UIControlStateNormal];
dealCell.dTimeAgo.text = [NSString stringWithFormat:@"5 min ago"];
[dealCell.dHeading setTitle:@"Deals Head" forState:UIControlStateNormal];
[dealCell.dDescription setTitle:@"Descriptionskjdfnkjsdnfis" forState:UIControlStateNormal];
dealCell.dImage.image = [pixUtil imageWithImage:[UIImage imageNamed:@"carrier.png"] scaledToSize:CGSizeMake(290, 250)];
[dealCell.dLike setTitle:@"Like" forState:UIControlStateNormal];
[dealCell.dShare setTitle:@"Share" forState:UIControlStateNormal];

return dealCell;

这是我的自定义单元初始化方法

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) 
    // Initialization code
    NSLog(@"NEW CELL");
    customRed = [[UIColor alloc]initWithRed:209.0f/255.0f green:19.0f/255.0f blue:38.0f/255.0f alpha:1.0f];

    [self setBackgroundColor:[UIColor grayColor]];

    containerCell = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 300, 700)];
    [containerCell setBackgroundColor:[UIColor whiteColor]];

    self.dBusinessLogo = [[UIImageView alloc]initWithFrame:CGRectMake(15, 15, 60, 60)];
    self.dBusinessName = [[UIButton alloc]initWithFrame:CGRectMake(80, 20, 225, 20)];
    [self.dBusinessName setTitle:@"Business Name" forState:UIControlStateNormal];
    self.dBusinessName.titleLabel.font = [UIFont boldSystemFontOfSize:14];
    [self.dBusinessName addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
    [self.dBusinessName setTitleColor:customRed forState:UIControlStateNormal];
    self.dTimeAgo = [[UILabel alloc]initWithFrame:CGRectMake(80, 50, 225, 15)];
    self.dHeading = [[UIButton alloc]initWithFrame:CGRectMake(15, 80, 290, 20)];
    self.dHeading.titleLabel.font = [UIFont boldSystemFontOfSize:14];
    [self.dHeading addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
    [self.dHeading setTitleColor:customRed forState:UIControlStateNormal];

    self.dDescription = [[UIButton alloc]initWithFrame:CGRectMake(15, 105, 290, 50)];
    self.dDescription.titleLabel.font = [UIFont boldSystemFontOfSize:14];
    [self.dDescription addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
    [self.dDescription setTitleColor:customRed forState:UIControlStateNormal];

    self.dImage = [[UIImageView alloc]initWithFrame:CGRectMake(15, 160, 290, 250)];
    self.dLike = [[UIButton alloc]initWithFrame:CGRectMake(10, 420, 150, 40)];
    self.dLike.titleLabel.font = [UIFont boldSystemFontOfSize:14];
    [self.dLike addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
    [self.dLike setTitleColor:customRed forState:UIControlStateNormal];

    self.dShare = [[UIButton alloc]initWithFrame:CGRectMake(160, 420, 150, 40)];
    self.dShare.titleLabel.font = [UIFont boldSystemFontOfSize:14];
    [self.dShare addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
    [self.dShare setTitleColor:customRed forState:UIControlStateNormal];

    [self.contentView addSubview:containerCell];
    [self.contentView addSubview:self.dBusinessLogo];
    [self.contentView addSubview:self.dBusinessName];
    [self.contentView addSubview:self.dTimeAgo];
    [self.contentView addSubview:self.dHeading];
    [self.contentView addSubview:self.dDescription];
    [self.contentView addSubview:self.dImage];
    [self.contentView addSubview:self.dShare];

   // NSLog(@"Deals View added");


return self;

这是我完整查看的 UITableViewCell。

当我向下滚动到下一个单元格时,它无法正确加载。

将单元格完全向上滚动后正确加载

请帮我解决这个问题。

【问题讨论】:

添加您的 cellForRowAtIndexPath 代码以供参考 当你分配你的单元格时,使用 initWithReuseIdentifier: 否则它总是会创建一个新的单元格。您也可以尝试使用 dequeueReusableCellWithIdentifier: 而不是 dequeueReusableCellWithIdentifier:forIndexPath: @Imotep 我在视图控制器中注册了单元格 [dealsTableView registerClass:[pixDealsTableViewCell class] forCellReuseIdentifier:@"Deals"];所以它不会每次都创建新的单元格。我检查了 NSLog。 @mehulpatel 我如何实现-layoutForSubviews? tableViewCell 没有那个方法? @mehulpatel 我用 customcell 初始化方法更新了帖子。你能解释一下我如何实现 layoutSubviews 方法吗? 【参考方案1】:

终于得到了答案。我创建了高度为 700 的 containerCell 视图。但单元格高度仅为 470。 我将 containerCell 视图高度更改为 470。它解决了我的问题。 :)

【讨论】:

以上是关于C# wpf怎么在grid添加自定义控件时显示滚动条的主要内容,如果未能解决你的问题,请参考以下文章

wpf 重新加载自定义控件出现异常

WPF中使用WebBrowser控件,怎么自定义它的滚动条样式

wpf image控件 设计时显示图片,运行时不显示

C# wpf 如何实现自定义控件,布局时,大小发生变化,内部绘制的曲线跟随变化?

wpf中动态添加的自定义控件过宽,不能完全显示,怎么办

WPF C# 如何在动态添加的grid控件中添加某个网格中的image控件的单击事件?