という方法です。
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 { public class MinusConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return ((double)value) - 15.0; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new 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>
どんなもんでしょう。