我正在嘗試在 WPF 控制元件中創建一個串列框,該控制元件 (1) 的最小高度為 80,并且 (2) 如果需要查看更多串列項,用戶可以將其調整為更大的垂直高度。我還希望控制元件在嵌套在垂直 stackPanel 中時,在用戶展開串列時在高度上展開。我一直在玩gridSplitter。我的 XAML 如下:
<UserControl x:Class="MyControl.FieldControl_SelectFrom"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MyControl"
mc:Ignorable="d"
d:DesignWidth="342">
<Grid Background="{x:Static SystemColors.ControlBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" x:Name="textBlock_fieldName" HorizontalAlignment="Left" Margin="20,4,0,0" TextWrapping="Wrap" Text="FieldName" VerticalAlignment="Top" FontWeight="Bold"/>
<ListBox Grid.Row="1" x:Name="selectorBox" MinHeight="80" Height="auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Padding="0,0,0,0" Margin="20,4,38,4" VerticalContentAlignment="Center" />
<GridSplitter Grid.Row="2" Height="2" VerticalAlignment="Center"></GridSplitter>
<TextBlock Grid.Row="3" x:Name="textBlock_fieldInfo" HorizontalAlignment="Left" Margin="20,0,0,6" TextWrapping="Wrap" VerticalAlignment="Bottom" FontStyle="Italic" Foreground="Gray">Field Info</TextBlock>
</Grid>
</UserControl>
當我運行專案時,串列框會展開以顯示全部內容 - 無法調整大小。
我錯過了什么?
uj5u.com熱心網友回復:
GridSplitter 的默認調整大小方向是GridResizeDirection.Auto. 如果您查看有關管理Auto行為的規則的GridResizeDirection.Auto檔案,您會注意到在您的情況下,GridSplitter(基于檔案中解釋的定義規則)實際上是在嘗試調整列之間的大小,而不是你想要的行。
您可以通過兩種方式使 GridSplitter 在行模式下作業。一種是將GridSplitter的 ResizeDirection 顯式設定為GridResizeDirection.Rows. 但是,這并不能完全解決您問題中給出的代碼的問題。
因為,如果不指定拆分器的寬度或讓它水平拉伸(您都沒有做過),拆分器仍然是一個點狀或短垂直線狀元素,寬度為零,實際上不可能命中。所以,基本上你可以告訴拆分器水平拉伸,這將使默認的自動調整大小方向在行模式下運行(因此不需要顯式設定ResizeDirection屬性)以及給拆分器一個實際可以命中的大小/用滑鼠指標抓取。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/472174.html
