更新
我没有提到我也在使用MetroTabControl
,因为我认为它不相关。但是,我做了一些测试,下面是我的结果。我也会发布这个作为我自己问题的答案。
MetroPanel
位于与更新问题的按钮不同的标签上我在与违规按钮和中提琴相同的标签上放置了不同的MetroPanel
,此面板工作得很好。我继续删除原始MetroPanel
并在单独的标签页上重新创建它。这似乎解决了这个问题。我不知道怎么做,但确实如此。
原文:
情况就是这样:
MetroModernUI
包,v1.4.0安装在
溶液MetroPanel
在MetroForm
上,AutoScroll
设置为true以处理水平
瓦片MetroTiles
是在运行时基于给定配置创建的注意:我并不担心每次卸载和重新加载所有磁贴的性能影响。我预计一次不需要超过10个。
问题:
当水平滚动条一直定位到面板右侧时,MetroTile
被移除并且不会重置。这导致滚动位置在实际可滚动区域之外,我可以说。这会导致闪烁,我的MetroTiles
实际上并未显示。我已经尝试了所有我能想到的相关滚动属性,但我不知所措。您可以在以下代码段中看到我使用AutoScrollPosition
和HorizontalScroll.Value
尝试重置它,但它不会重置。
示例: 这是发生了什么的GIF: https://gyazo.com/362b83abae795f728675a3c11fcf6a29
代码:
public void LoadTiles(MetroPanel panel)
{
foreach (Feed feed in Feeds.GetFeedsFromConfig())
{
var tile = CreateTile(feed);
AddTile(panel, tile);
}
}
public void UnloadTiles(MetroPanel panel)
{
var tiles = panel.Controls.OfType<MetroTile>().ToArray();
for(var i = tiles.Count()-1; i>=0; i--)
{
panel.Controls.Remove(tiles[i]);
tiles[i].Dispose();
}
panel.AutoScrollPosition = new Point(0, 0);
panel.HorizontalScroll.Value = 0;
}
public void AddTile(MetroPanel panel, MetroTile tile)
{
var numTiles = panel.Controls.OfType<MetroTile>().Count();
tile.Location = new Point(numTiles * 155, 0);
panel.Controls.Add(tile);
}
public MetroTile CreateTile(Feed feed)
{
MetroTile tile = new MetroTile();
tile.Text = feed.Name;
tile.Style = MetroColorStyle.Purple;
tile.TileTextFontSize = MetroTileTextSize.Tall;
tile.UseStyleColors = true;
tile.Theme = MetroThemeStyle.Dark;
tile.Tag = feed;
tile.Click += new EventHandler(LoadFeedInBrowser);
tile.Size = new Size(150, 100);
return tile;
}
答案 0 :(得分:0)
我没有提到我也在使用MetroTabControl
,因为我认为它不相关。但是,我做了一些测试,下面是我的结果。我也会发布这个作为我自己问题的答案。
MetroPanel
位于与更新问题的按钮不同的标签上我在与违规按钮和中提琴相同的标签上放置了不同的MetroPanel
,此面板工作得很好。我继续删除原始MetroPanel
并在单独的标签页上重新创建它。这似乎解决了这个问题。我不知道怎么做,但确实如此。我唯一的猜测是,我以某种方式搞砸了原始MetroPanel