更新: 我沒有提及我也在使用MetroTabControl
,因爲我認爲它不相關。但是,我做了更多的測試,下面是我的結果。我也會張貼這個作爲我自己問題的答案。當MetroTiles被移除時,MetroPanel滾動位置不重置
- 的
MetroPanel
這是造成問題的是不同的選項卡比按鈕,更新
我把不同的MetroPanel
相同標籤的違規按鈕和中提琴上,該面板的工作完全正常。我繼續刪除原始的MetroPanel
並在單獨的標籤頁上重新創建它。這似乎解決了問題。我不知道如何,但它在那裏。
原始文本:
情況是這樣的:
MetroModernUI
包由丹尼斯·馬格諾,V1.4.0安裝在一個MetroForm
的 解決方案MetroPanel
,AutoScroll
設置爲true水平處理 瓷磚MetroTiles
在運行時基於給定的配置創建uration- 當配置改變時,所有的瓦片被卸載並重新加載
注:我並不擔心卸載,每次重裝所有的磚的性能影響。我預計一次不會超過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;
}