我使用這行代碼以編程方式向我的 ListView 添加列:
gridView.Columns.Add(New GridViewColumn With {.Header = myWorksheet.Cells(1, myVar).Value, .DisplayMemberBinding = New Binding(myWorksheet.Cells(1, myVar).Value)})
我想要做的是將 HitTest 設定為 False 以便用戶無法調整添加的列的大小,我嘗試在我的 XAML 中執行此操作但它不起作用:
<GridView.ColumnHeaderContainerStyle>
<Style BasedOn="{StaticResource {x:Type GridViewColumnHeader}}" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>
</GridView.ColumnHeaderContainerStyle>
這可能需要 VB.Net 中的解決方案,因為 XAML 代碼不適用于以編程方式創建的列?
添加了 C# 標簽,因為我發現它可以轉換為 VB.Net。
uj5u.com熱心網友回復:
XAML 樣式適用于在 XAML 中添加的所有列以及從后面的代碼中添加的所有列。如果您不想IsHitTestVisible為全部設定,而只想為某些列的標題設定,那么這將很棘手。
我不知道優雅的解決方案。到目前為止,我知道沒有辦法獲得簡單的GridViewColumnHeader物件,它將被樣式化。
我的提議是注入一個控制元件而不是設定標題文本,例如TextBlock,它將遍歷父項并設定GridViewColumnHeader.IsHitTestVisible為 false。
public class TextBlockNoHit<ParentHitTestVisibleType> : TextBlock where ParentHitTestVisibleType: UIElement
{
public bool lsParentHitTestVisible { get; set; }
public TextBlockNoHit()
{
Loaded = TextBlockNoHit_Loaded;
}
private void TextBlockNoHit_Loaded(object sender, RoutedEventArgs e)
{
Loaded -= TextBlockNoHit_Loaded;
DependencyObject dpo = this;
while(dpo!=null)
{
dpo = VisualTreeHelper.GetParent(dpo);
if(dpo is ParentHitTestVisibleType gvch)
{
gvch.IsHitTestVisible = lsParentHitTestVisible;
}
}
}
}
然后使用:
var col = new GridViewColumn() { Header = new TextBlockNoHit<GridViewColumnHeader>() { Text = "myWorksheet.Cells...", IsHitTestVisible = false, lsParentHitTestVisible = false}, DisplayMemberBinding = new Binding("myWorksheet.Cells...") };
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384786.html
