想了一下,我想我有一個可以接受的解決方法。我並不完全滿意,如果有人有更好的(更清潔!)解決方案,那麼我真的很想知道。
解決方法依賴於只要爲該列(而不僅僅是MinWidth)設置了寬度屬性就會顯示正確的行爲的事實。所以答案是始終將Width屬性(通過綁定)設置爲網格的正確百分比(基本上WPF應該爲我做些什麼)。
要做到這一點首先創建一個轉換器,可以做乘法:
public class MultiplicationConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) return double.NaN;
return (double)value * double.Parse((string)parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然後計算MinWidth列是什麼個網格:
列MinWidth /電網的總寬度=百分比
最小寬度= 300 總寬= 478
478分之300= 62.7%
然後改變XAML中來設置minWidth列到網格的百分比的寬度(請注意,該轉換器的命名空間會改變其以往命名空間中放入):
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="500" >
<Window.Resources>
<local:MultiplicationConverter x:Key="MultiplicationConverter" />
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="300" Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type Grid}}, Converter={StaticResource MultiplicationConverter}, ConverterParameter=0.627}" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="1" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto" Text="abc abc abc abc abc abc abc abc abcabc abc abcabc abc abc abc abc abc" />
</Grid>
</Window>
我我會離開這個「沒有回答」幾天,看看有沒有人能想出一個更清潔的解決方案(上面的解決方案真的是一個黑客!)。