という方法です。
ColumnDefinitionのMaxWidthを指定してやれば実現できました。こんな感じのConverterを用意しておきます。
using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data; namespace WpfApplication8 { publicclass MinusConverter : IValueConverter { publicobject Convert(objectvalue, Type targetType, object parameter, CultureInfo culture) { return ((double)value) - 15.0; } publicobject ConvertBack(objectvalue, Type targetType, object parameter, CultureInfo culture) { thrownew NotImplementedException(); } } }
そして、XAMLでこんな感じでコンテナの現在の幅より最大幅がでかくならないように指定してやります。
<Window x:Class="WpfApplication8.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApplication8" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <local:MinusConverter x:Key="MinusConverter" /> </Window.Resources> <Grid x:Name="LayoutRoot"> <Grid.ColumnDefinitions> <ColumnDefinition Width="100" MaxWidth="{Binding ActualWidth, ElementName=LayoutRoot, Converter={StaticResource MinusConverter}}" /> <ColumnDefinition Width="5" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Border Background="Red" /> <GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> <Border Background="Blue" Grid.Column="2" /> </Grid> </Window>
どんなもんでしょう。