有人請幫我解決這個問題。我有一個數據網格,我需要一切都具有完全可擴展的大小。我對列標題沒有任何問題,它們都可以正確縮放。我的問題是針對單個細胞,他們似乎不尊重它們的約束力。WPF如何綁定到私有變量
我不得不子類DataGridTextColumn添加一些自定義功能。我有一個名爲CreateDataGridColumn的方法,它返回對ExtendedDataGridTextColumn的引用。這些列然後被添加到數據網格。數據綁定本身工作正常,網格顯示所有正確的數據。網格高度的綁定似乎設置了初始值,但一旦顯示網格,如果它所綁定的變量發生更改,它不會更改高度。
下面是一些代碼:
_customDataGrid.TitleAreaHeight = new GridLength(GlobalVariables.DesignerPreviewHeight * (_titleHeightPercentage/100));
_customDataGrid.SetHeaderFontSize(GlobalVariables.DesignerPreviewHeight * (_headerHeightPercentage/100));
_fontSize = GlobalVariables.DesignerPreviewHeight * (_gridTextHeightPercentage/100);
前兩行做什麼,他們都應該更改:
private ExtendedDataGridTextColumn CreateDataGridColumn(EntityBase dataColumn, FormatConditionGroup formatConditionGroup)
{
ExtendedDataGridTextColumn newColumn = new ExtendedDataGridTextColumn(dataColumn);
DataTemplate dataTemplate = new DataTemplate();
String textBlockName = "Text" + dataColumn.EntityId;
String columnTag = dataColumn.GetPropertyValue("Tag");
// Create the TextBlock that will display the cell contents
FrameworkElementFactory textBlockFNFactory;
textBlockFNFactory = new FrameworkElementFactory(typeof(TextBlock));
_gridTextHeightPercentage = dataColumn.GetPropertyDouble("GridFontSize", Constants.DefaultFontHeightPercent)/2.8;
_fontSize = GlobalVariables.DesignerPreviewHeight * (_gridTextHeightPercentage/100);
Binding binding = new Binding();
binding.Source = _fontSize;
textBlockFNFactory.SetBinding(TextBlock.FontSizeProperty, binding);
// Do a whole bunch of stuff here
// Create a border so that the label background does not obscure the grid lines
FrameworkElementFactory borderFNFactory;
borderFNFactory = new FrameworkElementFactory(typeof(Border));
borderFNFactory.AppendChild(textBlockFNFactory);
// Add type to data template
dataTemplate.VisualTree = borderFNFactory;
newColumn.CellTemplate = dataTemplate;
return newColumn;
}
然後,我有以下方法上SizeChanged事件爲DataGrid解僱標題區域的高度,這是我添加到我的數據網格並更改標題高度。雖然_fontSize變量的更新不會更改數據網格單元格文本高度。
更新
按照建議我添加一個依賴屬性本身。
public static readonly DependencyProperty GridFontHeightProperty = DependencyProperty.Register("GridFontHeight", typeof(double), typeof(CustomDataGrid));
然後將我的綁定代碼更改爲此。
binding = new Binding();
binding.Path = new PropertyPath("GridFontHeight");
textBlockFNFactory.SetBinding(TextBlock.FontSizeProperty, binding);
然後在我的大小更改添加此。
SetValue(GridFontHeightProperty, _fontSize);
但它不起作用。在這種情況下,它不會正確設置字體高度,它只是使用數據網格的默認字體高度。
我還以爲是出結合正常的CLR屬性。我創建一個綁定對象,設置源代碼然後以編程方式調用SetBinding。 – WPFNewbie