我有一個自定義控件,放在網格的單元格內。我有一些內部計算需要根據自定義控件的高度和寬度來運行。不過,我希望它根據單元格的大小來調整大小。如何確定網格單元的大小?
所以,我的主要問題是...如何以編程方式確定給定單元格的高度和寬度?
我有一個自定義控件,放在網格的單元格內。我有一些內部計算需要根據自定義控件的高度和寬度來運行。不過,我希望它根據單元格的大小來調整大小。如何確定網格單元的大小?
所以,我的主要問題是...如何以編程方式確定給定單元格的高度和寬度?
找出自定義控件的高度和寬度可能比較容易,而不是DataGrid的單元格。
您的控件應該可以訪問(通過FrameWork Element)屬性ActualHeight和ActualWidth。這些屬性將在更改大小時更新。
此外,每當高度和寬度改變時,SizedChanged事件將在您的控件上觸發。
我強烈建議將此高度和寬度邏輯放置在您的控件內。您不希望僅限於將自定義控件放置在DataGrid中。
private void UserControl_SizeChanged(object sender, System.Windows.SizeChangedEventArgs e)
{
HeightBox.Text = this.ActualHeight.ToString();
}
我想我要做的事(或被要求做我)要能夠a)指定尺寸或b)允許尺寸適應容器。例如,一個按鈕......你可以給它一個尺寸或讓它的尺寸由它的容器決定。這就是我要去的。我從ListBox中派生出一個控件,並且在沒有指定大小的情況下可以在網格中正常工作。另一個控件派生自Control,並由ScrollViewer(和一些畫布)組成。在網格單元格中放置ScrollViewer本身會給我所期望的行爲,但我的自定義控件的行爲有所不同。 – beaudetious 2010-04-16 16:20:17
因此,如果我知道單元格的大小,則至少可以在調整大小時在代碼中設置自定義控件的大小。 – beaudetious 2010-04-16 16:20:44
耶利米!我可以吻你,但這將是)不可能通過StackOverflow和b)種毛病。我原來的代碼工作正常,除了我使用this.Width而不是this.ActualWidth等 感謝您恢復我對StackOverflow社區的信心。 – beaudetious 2010-04-16 16:49:55
您可以通過RowDefinitions和ColumnDefinitions得到網格單元的大小:
MyGrid.RowDefinitions[1].ActualHeight
MyGrid.ColumnDefinitions[1].ActualWidth
,但它應該是相當罕見的情況,那麼你必須採取這種做法
顯然,我問要麼是非常困難,要麼是引人深思的問題,要麼是非常容易的,以至於沒有人想刺探他們。 ;) – beaudetious 2010-04-16 15:26:07