2012-08-30 29 views
3

更新問題:如何在初始化後調整GridView列的寬度?

在WPF我使用GridView(內部的ListView)來顯示的Textbox-Slider雙列表。每個這樣的對都排列在單列中的一個單元中(每對使用DockPanel)。

滑塊具有最小寬度,因此它不會摺疊,文本框不會,它會在接收輸入時動態調整大小。

問題是,當文本框的寬度增加時,列寬並未等效更改。這會使相應行中的滑塊在視覺上夾在右側。結果滑塊的旋鈕在移動到右端時消失在虛空中。

所以問題是:如果內容超過可用空間(在初始化時設置),如何強制GridView的列寬動態調整大小?

Percentage sliders with disappearing knobs

簡單地忽略這個文本框和滑塊之間的標籤(沒有它的行爲不會改變)。

+3

如果你有複雜的代碼,你應該做的第一件事就是提取你的問題區域併發佈一個展示問題的獨立示例。也許你甚至可以解決這個過程中的問題。 –

+0

這不是一個標準的行爲。這表明你的容器(網格,堆疊面板,dockpanels)沒有正確設置。剝掉那段代碼,這樣我們可以檢查。 – LadderLogic

+0

由於嵌入在相當複雜的程序中,因此很難提取相關的代碼片段。 – Bastian

回答

1

某些容器可能會通過ClipToBounds將其剪下,或根據背景顏色的實現方式將它們疊加在另一列上。

+0

將代碼提取到一個乾淨的新項目後,我發現它不是由'ClipToBounds'引起的。看看更新後的帖子。 – Bastian

2

一個辦法做到這一點是採取標籤的事件,它佈雷到電網(SizeChanged將),然後調整大小按比例拉布勒大小去網...

1
Size containerSize=new Size(100, 100); 
public Size CalculateSize(FrameworkElement visualBlock, Size containerSize) 
{ 
    visualBlock.Measure(containerSize); 
    return visualBlock.DesiredSize; 
} 

這段代碼獲得容器內渲染框架元素的大小。之後,您可以以編程方式設置大小。 需要知道父母的正確工作。

+0

那麼,爲了測量一個FrameworkElement的大小,我首先需要訪問這個元素。問題是,元素(即滑塊)被插入到GridViewColumn中。所以我必須從那裏訪問它們 - 是否有任何方法可以實現這一目標? – Bastian

+0

嘗試使用http://stackoverflow.com/questions/636383/wpf-ways-to-find-controls中的示例 – Frank59

相關問題