我在 WPF/XAML 中遇到了一個奇怪的行為。我的意圖是創建這樣的東西,使用Borders、aListView和Borders的樣式:

這就是我認為的代碼應該是:
<ListView HorizontalAlignment="Right" Margin="20">
<ListView.Resources>
<Style TargetType="Border">
<Setter Property="Height" Value="20"/>
<Setter Property="Width" Value="150"/>
<Setter Property="Background" Value="Blue"/>
</Style>
</ListView.Resources>
<Border/>
<Border/>
</ListView>
但該代碼實際上產生了這個:

這讓我玩了一會兒,我發現了一些非常奇怪的東西。s樣式中的Width和Height值Border正在應用到它ListView本身!
例如,這段代碼:
<ListView HorizontalAlignment="Right" Margin="20">
<ListView.Resources>
<Style TargetType="Border">
<Setter Property="Height" Value="100"/>//this should do nothing because the borders set their own height
<Setter Property="Background" Value="Blue"/>
</Style>
</ListView.Resources>
<Border Height="20" Width="150"/>
<Border Height="20" Width="150"/>
</ListView>
產生這個:
(高度ListView為100像素)
當我更改HeightStyle值中的值時,我的期望是它適用于Borders,然后他們會忽略它,因為他們設定了自己的高度。換句話說,它應該沒有影響。但是當我改變時Height,改變的高度ListView。
為了讓事情變得更奇怪,該Background值被正確地應用于Borders。我對這段代碼應該如何作業有誤解嗎?我發現了一個錯誤嗎?做我想做的事情的正確方法是什么?
我使用的是 Visual Studio 2022、.NET 6、C# 10。
uj5u.com熱心網友回復:
我想到了。ListView使用Border內部作為其背景。Style 正在應用到 this Border,以及Border.s 中的專案ListView。
解決方案是使用除 之外的型別Border,或者制作一個包裝Border. Grid作業得很好:
<ListView HorizontalAlignment="Right" Margin="20">
<ListView.Resources>
<Style TargetType="Grid">
<Setter Property="Height" Value="20"/>
<Setter Property="Width" Value="150"/>
<Setter Property="Background" Value="Blue"/>
</Style>
</ListView.Resources>
<Grid/>
<Grid/>
</ListView>
產生這個:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/357668.html
上一篇:如何從XAML使用WPFSystemCommands.CloseWindow?
下一篇:帶有TreeViewItem.Header的TreeViewItem上的C#WPFTreeViewItemMouseDoubleClick事件
